我用 JS 开发已经有一段时间了,虽然我知道下面的代码可以工作,但我不太明白why有用。
在我看来,我在 testClosure 函数中定义了 testString,并且我期望该变量在 testClosure 函数完成时“消失”,因为它是局部变量。
但是,当我使用计时器调用内部函数时,它仍然知道 testString 变量。为什么?当 testClosure 执行完毕时,这个变量不是在五秒前就消失了吗?内部函数是否获取对 testClosure 中所有变量的引用,并且它们在所有内部函数完成之前保持有效?
function testClosure() {
var testString = 'hai';
// after 5 seconds, call function below
window.setTimeout(function() {
// check if function knows about testString
alert(testString);
}, 5000);
}
testClosure();
The function
特殊形式创建词汇范围。在该范围内创建的任何对象都将在其创建时在范围内按词法查看环境(名称到值的绑定)。
事实上,创建一个函数就是only在 JavaScript 中创建词法作用域的方法,这就是为什么你总是看到这样的扭曲:
return (function() {
var privateVariable = 'foo';
return {
myProp: privateVariable
};
})();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)