Javascript -在函数中使用变量
Javascript - use variable in a function, within a function
这段代码困扰了我一整天。假设ledCount = 9,代码按ID获取元素没有任何问题,但由于它必须绑定一个单独的函数onClick,并且由于变量i是本地的,writeLED函数总是获得第一个参数10(最大i+1),但它需要获得当前的i+1,就像getElementBy ID i+1一样。有人能解出这个谜题吗?
function showLED(ledCount){
for(var i = 0;i<=(ledCount-1);i++){
if(color[i] == 0){
document.getElementById('buttonLED'+(i+1)).onclick = function(){writeLED((i+1),1); } ;
document.getElementById('buttonLED'+(i+1)).value="light is on";
}else{
document.getElementById('buttonLED'+(i+1)).onclick = function(){writeLED((i+1),0); } ;
document.getElementById('buttonLED'+(i+1)).value="light is off";
}
}
}
您需要将其封装在一个自动执行的函数中,以创建一个新的作用域,在该作用域中可以保留递增函数的当前值。
你可以这样做:
document.getElementById('buttonLED'+(i+1)).onclick = function(loopincrement){
return function(){writeLED((loopincrement+1),1); } ;
}(i)
或者像这样作为一个拉出函数:
function writeLEDInNewScope(inc){
return function(){ writeLED(inc,1)};
}
document.getElementById('buttonLED'+(i+1)).onclick = writeLEDinNewScope(i+1);
外部函数将为内部onclick函数保留i值的当前值。它立即执行并返回您希望绑定到onclick属性的内部函数。它将维护对loopincrement
变量的引用,这将不会受到未来循环迭代的影响。
这是一个臭名昭著的for循环问题。你必须像这样重写你的代码:
function callback(x) {
return function() { writeLED(x, 1); };
}
function showLED(ledCount) {
for (var i = 0; i <= (ledCount - 1); i++)(function(i) {
if (color[i] == 0) {
document.getElementById('buttonLED' + (i + 1)).onclick = callback(i + 1);
document.getElementById('buttonLED' + (i + 1)).value = "light is on";
} else {
document.getElementById('buttonLED' + (i + 1)).onclick = callback(i + 1);
document.getElementById('buttonLED' + (i + 1)).value = "light is off";
}
})(i);
}
相关文章:
- 带有两个变量函数的Ajax提交表单
- 设置变量函数不起作用
- 为什么使用 ||在变量函数声明中
- Javascript 变量函数不保留值
- 为什么要在函数定义之外引用静态变量(函数属性)
- jQuery 变量函数无法运行
- 循环中的变量函数定义
- javascript onclick设置为变量函数名
- JavaScript:调用已启动类(数据包处理程序)的变量函数
- Javascript测试存根全局变量函数
- Aptana能否识别其他文件中定义的变量/函数
- jquery将其传递给变量函数
- 传递一个变量函数到数组[Javascript]
- 如何使用' this '像一个对象,并通过字符串获得它的变量/函数
- javascript变量/函数的首字母是什么意思?
- Javascript .apply带有变量函数名
- 在JavaScript中添加一个全局变量/函数(特别是NativeScript)
- 变量函数未定义错误
- AngularJS-继续检查变量/函数
- Javascript从本地向全局变量函数添加行