Wikipedia's article on first-class citizens states that "some authors" believe functions are only first-class citizens in a language if the language supports their creation at run-time. This article written by James Coglan plainly calls functions first-class citizens - whether or not he is aware of the dispute over the criteria for first-class, I do not know.
Here are my questions:
It is worth mentioning that based upon more generalized criteria (applicable to other objects at-large), JavaScript functions are very obviously first-class citizens, namely they can be passed around as variables; therefore, I feel the criteria mentioned above adds an interesting dynamic - or, at least, a clarifying dynamic - to the conversation that is not - as one user writes - "arbitrary".
Functions can be created dynamically using the Function
constructor
var adder = new Function('a', 'b', 'return a + b');
adder(3, 4); // returns 7
More elaborately, this could be used to apply an arbitrary binary operator:
function make_binary_fun(operator) {
return new Function('a', 'b', 'return a ' + operator ' b');
}
var adder = make_binary_fun('+');
var multiplier = make_binary_fun('*');
Here's an example of a function that creates a function at runtime in JavaScript:
function makeIncrementer(value) {
return function(x) {
return x+value;
}
}
It takes a value, and returns a function that adds that value to its input.
Here are some examples of ways to call it:
var f = makeIncrementer(5);
f(2); // 7
f.call(null, 3); // 8
f.apply(null, [4]); /// 9
var object = {};
object.increment = f;
object.increment(5); // 10
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With