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 to eval. However, unlike eval, the Function 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 of Function. Use the arguments 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 provided thisArg. Arguments can be passed as an Array object.
Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])
Creates a new function which, when called, has its this set to the provided thisArg. 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 the Object.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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:140 次

字数:7347

最后编辑:7 年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文