Javascript 拼接 while push 在事件处理程序中

标签 javascript

假设你有一个像这样的数组:

var arr= [{id:121, v:'a'}, {id:232, 'b'}];

你需要找到 id: 232 并删除它,所以你可以这样做:

for (var i = arr.length; i--;) {
   if (arr[i].id  === 232) {
      arr.splice(i, 1);
   }
};

假设有一个事件处理程序将项目添加到数组中,例如:

arr.push( {id:443, 'c'} );   

是否有可能在 for 循环迭代时调用事件处理程序?如果是这样,则 splice(i,1) 将删除错误的数组索引。

由于 javascript 是单线程的,它是否足够智能以在处理事件之前完成 for 循环?

最佳答案

有趣的问题。我做了一个小测试来检查真实情况:http://jsfiddle.net/wared/ERjJj/ .看起来点击事件发生在循环完成后(仅使用 Chrome 测试)。

<ol>
    <li>Open your browser console.</li>
    <li>Click <button>start</button>.</li>
    <li>The console prints <code>wait...</code>.</li>
    <li>Click again, one or more times, anywhere in this panel.</li>
    <li>Wait a few seconds until the console prints <code>done!</code>.</li>
    <li>The console prints <code>click</code>.</li>
</ol>
$(document).click(function () {
    console.log('click');
});
$('button').one('click', function click() {
    var i = 0, b = this;
    console.log('wait...');
    while (i++ < 1E10) 1+1;
    console.log('done!');
    setTimeout(function () {
        $(b).one('click', click);
    }, 10);
});

如果有任何问题,请随时告诉我。

关于Javascript 拼接 while push 在事件处理程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22075891/

相关文章:

javascript - 为什么 JavaScript 在条件语句中同时允许 &&(逻辑)和 &(按位)?

javascript - 网页中插入的可视化数据未正确缩进且未出现在所需位置

javascript - 为 Sublime Text for JavaScript 添加语法高亮

javascript - Object.Freeze Javascript

javascript - 嵌套 if 语句的编程逻辑

javascript - 为什么 bookmarkItem.url 返回为未定义,而 bookmarkItem.id 工作正常?

需要 javascript 正则表达式,仅括号内的数字,多个

javascript - 如何在javascript中获取json键和值?

javascript - React/Next.js 似乎不适用于 Apexcharts

javascript - 增加我的密码长度进度条