javascript - 循环调用中的问题

标签 javascript html

我在 JavaScript 工作。我遇到循环调用问题。
我的代码是:

这是我的数组

picArray = []; // Have tried with this too var picArray = new Array();

这是我的 onClick 函数:

handler:function(){
    for(var i = 1; i<picArray.length; i++) {
        alert(picArray[i]);
    }
}

这是我打印数组值的循环。 我的数组是:

var imgSource = document.getElementById(hellow).src;
picArray[hellow] = imgSource;

此数组正在获取条件数据。单击称为上传的按钮时将调用处理函数。问题是当我按下上传按钮时,它会打印出正确的值并保持按下状态并再次打印这些值。我的代码中是否有任何错误强制循环打印值 2 次?
或者其他任何东西正在做这个?

最佳答案

我认为您应该考虑在单击按钮时使用闭包函数,以保留外部上下文的范围。我的假设是问题的根源在于这样一个事实,即当您进入循环条件时,只有在循环结束时您才能获得最终值。

这个问题可以通过创建一个函数并在循环的每次迭代中调用它来解决,同时传递 i;调用该函数将形成一个全新的执行上下文,其中 i 的值被保留并且可以在该上下文中以任何方式使用,包括在返回的函数中。

因为您没有发布其余代码,所以我只认为这就是问题所在。为了解决这个问题,这里是我将在这个上下文中使用的代码:

function handler(n) {
    return function() {
        alert( 'You clicked on: ' + n );
    };
}

for (var i = 0; i < picArray.length; ++i) {
    picArray[i].onclick = handler(i);
}

...或者另一种更优雅的方式:

for (var i = 0; i < picArray.length; ++i) {
    picArray[i].onclick = (function(n) {
        return function() {
            alert( 'You clicked on: ' + n );
        };
    })(i);
}

关于javascript - 循环调用中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14314581/

相关文章:

javascript - React - 当按钮增加并在另一个页面中呈现结果时增加计数器的最佳方法?

javascript - ReactJS类型错误: Cannot read property 'eventEmitter' of undefined

javascript - jquery DataTable 搜索和排序不起作用

javascript - 单击添加行并从列表中选择1个选项时,我想获得总和值吗?

javascript - 技术原因我们无法通过 Map.prototype.keys() 使用 forEach() 进行迭代

javascript - HTML5 拖放 : The dragged element content is missing in Webkit browsers

html - 我想减少导航栏中一个 flex 元素的宽度

html - 与在带有样式表的 ul 中使用 ul 冲突

css - 调整嵌入的 div

javascript - 动态表单页面上的文本区域值 = 未定义