les*_*ang 8 javascript closures ecmascript-5
我知道JavaScript中的每个函数都是一个第一类对象,它有一个内部属性[[scope]],它承载函数自由变量的绑定记录.但是,有两种特殊情况.
Function构造函数创建的函数也是一个闭包吗?Function构造函数创建的函数对象是特殊的,因为它的[[scope]]可能不引用其外部函数的词法环境,而只引用全局上下文.例如,
var a = 1;
var fn = (function outer() {
var a = 2;
var inner = new Function('alert(a); ');
return inner;
})();
fn(); // will alert 1, not 2.
Run Code Online (Sandbox Code Playgroud)
这是不直观的.这也叫封闭吗?
如果内部函数没有任何自由变量,我们可以说在创建内部函数时会形成闭包吗?例如,
// This is a useless case only for academic study
var fn = (function outer() {
var localVar1 = 1,
localVar2 = 2;
return function() {};
})();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,fn指的是作为内部函数创建的空函数对象.它没有自由变量.在这种情况下我们可以说闭合形成了吗?
注意:使用Function构造函数创建的函数不会创建其创建上下文的闭包。它们总是在全局范围内创建。运行它们时,它们将只能访问自己的局部变量和全局变量,而不能访问调用Function构造函数的作用域中的局部变量和全局变量。这与对函数表达式使用带有代码的eval不同。
来自https://developer.mozilla.org
归档时间: |
|
查看次数: |
1224 次 |
最近记录: |