gpt4 book ai didi

javascript - 理解对象的属性+回调

转载 作者:行者123 更新时间:2023-11-30 18:33:19 25 4
gpt4 key购买 nike

起初我对以下代码发生了什么感到有点困惑:

people =
jim: 'Jim'
james: 'James'

for k, v of people

setTimeout( ( -> console.log(k) ), 300 )

#OUTPUT
#james
#james

JavaScript 版本:

var people = {
jim: 'Jim',
james: 'James'
};


for(var k in people){

setTimeout( function(){ console.log(k); }, 300 );

};

//OUTPUT
//james
//james

但我猜当 console.log(k) 被执行时 k 已经改变了?如何修复它,使输出为“jim, james”?

最佳答案

您遇到了经典的 JavaScript 闭包问题。请参阅 CoffeeScript documentation 的“循环和理解”部分中有关“闭包包装器”的部分。 .

针对您的问题的 CoffeeScript 解决方案是 do 关键字:

for k, v of people
do (k) ->
setTimeout( ( -> console.log(k) ), 300 )

由于您包含了问题的 Javascript 版本,因此 Javascript 解决方案将如下所示:

for(var k in people){
(function(k) { setTimeout( function(){ console.log(k); }, 300 ); })(k);
};

但这太丑陋了,所以如果我在 JS 中这样做,我更喜欢这种方法:

var delayedLog = function(k) {
setTimeout( function(){ console.log(k); }, 300 );
};

for(var k in people){
delayedLog(k);
};

关于javascript - 理解对象的属性+回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9001828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com