![](/img/trans.png)
[英]When does the closure capture the variable value (defined in an outer function) in javascript: when nested function is defined or executed?
[英]How to capture current value of an outside variable when function is defined
通常,我会以编程方式将处理程序附加到DOM中依赖于以后可能会更改的变量的元素上。
nextID = "#content-" + dataElement.elementBack;
something.on("change", function (e) {
$(nextID).css({left: 0, position:'fixed', zindex: -1});
});
到该函数被触发时,nextID的值已更改并且作用于错误的元素。
在第一次定义变量或将其附加到事件时,是否可以使用该函数的当前值?
(请不要建议我在其中硬编码该元素,而不是nextID。如果可以的话,我可以这样做。)
解决方法是使用自调用函数 :
nextID = "#content-" + dataElement.elementBack;
(function(nextID) {
something.on("change", function (e) {
$(nextID).css({left: 0, position:'fixed', zindex: -1});
});
})(nextID);
函数在JavaScript中创建新的作用域,并且由于您将nextID
用作参数,因此nextID
将成为作用域,并且将在触发change
事件时捕获并可用。
这是因为JavaScript不会为函数以外的任何其他语言构造创建作用域。 例如, for
for(var i = 0; i < 10; i++) {}
将不会创建作用域,并且一旦循环结束, i
在当前作用域中可用,它将包含10
。
我建议您看一下下一版ECMA-Script(ECMA-Script 6)的let
关键字部分,它将使我们创建基于块的变量。
你可以创建一个初始值绑定IIFE nextID
该功能的处理程序。 当前,我们正在创建一个闭包,其中变量值的范围仅限于内部返回的函数。
nextID = "#content-" + dataElement.elementBack;
something.on("change", (function(nextID) {
return function (e) {
$(nextID).css({left: 0, position:'fixed', zindex: -1});
}
})(nextID)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.