《2018年9月20日》【连续352天】
标题:闭包引起的问题,使用立即执行函数解决;
内容:
function test()
{
var arr = [];
for (var i = 0; i < 10; i++)
{
arr[i] =function ()
{
document.write(i+" ");
}
}
return arr;
}
var myArr = test();
for (var j = 0; j < 10; j++)
{
myArr[j]();
}
//错误:以为输出0~9

因为arr数组里的函数共享了同一个i,最后i变成了10。
使用立即执行函数解决:
function test()
{
var arr = [];
for (var i = 0; i < 10; i++)
{
(function (j)
{
arr[j] =function ()
{
document.write(j+" ");
}
}(i));
}
return arr;
}

本文探讨了JavaScript中由于闭包导致的变量共享问题,并通过一个具体的示例展示了如何使用立即执行函数表达式(IIFE)来解决这个问题,确保每个函数都能访问到独立的变量副本。
16万+

被折叠的 条评论
为什么被折叠?



