>>> function () {}
SyntaxError
>>> f = function() {}
f = function() {}
>>> new function() {}
>>> Object
>>> new Function()
function anonymous() {}
>>> Function()
function anonymous() {}
>>> f = (function() { a = 10; return function() {console.log(a);} })();
>>> f()
10
undefined
>>> f = (function() { a = 10; return new Function('console.log(a)'); })();
>>> f()
undefined
Run Code Online (Sandbox Code Playgroud)
因此,我有两个问题:
为什么Function即使没有new运算符,构造函数也会返回一个新函数?
是否使用Function构造函数NOT闭包创建函数?
为什么即使没有new运算符,Function构造函数也会返回一个新函数?
呼叫Function()与呼叫相同new Function():
当
Function作为函数而不是构造函数调用时,它会创建并初始化一个新的Function对象.因此,函数调用Function(…)等效于new Function(…)具有相同参数的对象创建表达式.
是否使用Function构造函数NOT闭包创建函数?
是的,函数的范围设置为全局环境,而不是词法环境的范围.见http://es5.github.com/#x15.3.2.1,第11步:
11.返回按照13.2中的指定创建的新Function对象,将P作为FormalParameterList传递,并将Body作为FunctionBody传递.传入Global Environment作为Scope参数,严格作为Strict标志.
这意味着使用Function构造函数就好像您在全局范围内声明了一个函数,关于它可以访问的范围(而不是关于函数可见的位置).
这与使用函数声明/表达式不同,其中作用域基于当前的exectution上下文(http://es5.github.com/#x13):
- 让funcEnv成为调用NewDeclarativeEnvironment传递正在运行的执行上下文的Lexical Environment作为参数的结果
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |