定义函数时,如何捕获外部变量的当前值
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(var i = 0; i < 10; i++) {}
这样的for
不会创建作用域,一旦循环结束,i
在当前作用域中可用,它将包含10
。
我建议您查看下一版本ECMA脚本(ECMA脚本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)
);
相关文章:
- 将变量传递给外部Javascript
- 访问函数外部的变量
- 如何在定义js文件后为外部javascript文件设置变量
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- 在使用cq:include包含外部JS之前,如何在JSP中包含全局JS变量
- 如何在外部访问本地变量
- 定义函数时,如何捕获外部变量的当前值
- 如何在外部文档中使用javascript将文本区域的内容保存为变量
- 使用在函数外部声明的变量的 Javascript 返回值 + undefined
- 为什么在中声明具有外部访问权限的变量
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 在php中为变量提供外部作用域
- JavaScript 变量使用外部函数
- 在JavaScript中,变量变为循环外部的NaN
- 将外部控制器的范围变量设置为角度
- 如何从变量外部访问JavaScript对象
- JavaScript变量外部函数不保留值
- Javascript+jQuery UI:将JSON变量外部化到文件后,如何读回值
- 访问变量外部 foreach Jquery