为什么这两段看似相同的代码在 Javascript 和 Lua 中表现不同?
卢阿:
function main()
local printFunctions={}
local i,j
for i=1,10 do
local printi = function()
print(i)
end
printFunctions[i]=printi
end
for j=1,10 do
printFunctions[j]()
end
end
main()
Javascript:
function main()
{
var printFunctions=[]
var i,j;
for(i=0;i<10;i++)
{
var printi = function()
{
console.log(i);
}
printFunctions[i]=printi;
}
for(j=0;j<10;j++)
{
printFunctions[j]();
}
}
main()
Lua 中的示例打印0 1 2 3 4 5 6 7 8 9
,但 Javascript 中的示例打印10 10 10 10 10 10 10 10 10 10
。谁能解释导致这种情况发生的 Javascript 和 Lua 中的闭包之间的区别?我来自 Javascript 背景,所以请关注 Lua 方面。
我试图在我的博客上解释这一点,但我不确定我的解释是否正确,所以任何澄清将不胜感激。
编辑
谢谢大家,现在我明白了。这个稍加修改的 Lua 代码版本按预期打印 10,10,10,10,10,10,10,10,10,10
function main()
local printFunctions={}
local i,j,k
for i=1,10 do
k=i
local printi = function()
print(k)
end
printFunctions[i]=printi
end
for j=1,10 do
printFunctions[j]()
end
end
main()