Function - JavaScript 编辑
Every JavaScript function is actually a Function
object. This can be seen with the code (function(){}).constructor === Function
, which returns true.
Constructor
Function()
- Creates a new
Function
object. Calling the constructor directly can create functions dynamically but suffers from security and similar (but far less significant) performance issues toeval
. However, unlike eval, theFunction
constructor creates functions that execute in the global scope only.
Instance properties
Function.prototype.arguments
- An array corresponding to the arguments passed to a function.
This is deprecated as a property ofFunction
. Use thearguments
object (available within the function) instead. Function.prototype.caller
- Specifies the function that invoked the currently executing function.
This property is deprecated, and is only functional for some non-strict functions. Function.prototype.displayName
- The display name of the function.
Function.prototype.length
- Specifies the number of arguments expected by the function.
Function.prototype.name
- The name of the function.
Instance methods
Function.prototype.apply(thisArg [, argsArray])
- Calls a function and sets its
this
to the providedthisArg
. Arguments can be passed as anArray
object. Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])
- Creates a new function which, when called, has its
this
set to the providedthisArg
. Optionally, a given sequence of arguments will be prepended to arguments provided the newly-bound function is called. Function.prototype.call(thisArg[, arg1, arg2, ...argN])
- Calls a function and sets its
this
to the provided value. Arguments can be passed as they are. Function.prototype.toString()
- Returns a string representing the source code of the function.
Overrides theObject.prototype.toString
method.
Examples
Difference between Function constructor and function declaration
Functions created with the Function
constructor do not create closures to their creation contexts; they always are created in the global scope. When running them, they will only be able to access their own local variables and global ones, not the ones from the scope in which the Function
constructor was created. This is different from using eval
with code for a function expression.
var x = 10;
function createFunction1() {
var x = 20;
return new Function('return x;'); // this |x| refers global |x|
}
function createFunction2() {
var x = 20;
function f() {
return x; // this |x| refers local |x| above
}
return f;
}
var f1 = createFunction1();
console.log(f1()); // 10
var f2 = createFunction2();
console.log(f2()); // 20
While this code works in web browsers, f1()
will produce a ReferenceError
in Node.js, as x
will not be found. This is because the top-level scope in Node is not the global scope, and x
will be local to the module.
Specifications
Specification |
---|
ECMAScript (ECMA-262) The definition of 'Function' in that specification. |
Browser compatibility
BCD tables only load in the browser
See also
- Functions and function scope
function
statementfunction
expressionfunction*
statementfunction*
expressionAsyncFunction
GeneratorFunction
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论