gpt4 book ai didi

javascript - 为什么在这个例子中会返回一个函数而不是一个字符串

转载 作者:行者123 更新时间:2023-11-30 05:33:14 24 4
gpt4 key购买 nike

an answer to this question ,我可以看到 i 的值是通过将它扔到另一个函数中来保留的:

var funcs = [];

function createfunc(i) {
return function() { console.log("My value: " + i); };
}

for (var i = 0; i < 3; i++) {
funcs[i] = createfunc(i);
}

for (var j = 0; j < 3; j++) {
funcs[j](); // and now let's run each one to see
}

http://jsbin.com/raxifitaberu/1/edit

为什么函数 createfunc() 需要返回另一个函数?为什么这比只返回字符串更好:

 var myArray = [];

function createFunc(i){
return "My value: " + i;
};

for (var i = 0; i < 5; i++){
myArray[i]=createFunc(i);
}

console.log(myArray[0]);
console.log(myArray[1]);
console.log(myArray[2]);

http://jsbin.com/demiloronohe/1/edit

将函数放在 return 后面有什么好处吗?

最佳答案

在你的例子中它确实没有必要,因为函数返回一个常量表达式(忽略执行 console.log 的副作用并将其作为“返回”值)

但是,我们可以给它一个参数并包含一些逻辑:

var funcs = [];

function createfunc(i) {
return function(j) {
if (i == j) console.log("You've found " + i);
else console.log("I'm not " + j);
};
}

for (var i = 0; i < 3; i++)
funcs[i] = createfunc(i);
for (var j = 0; j < 3; j++)
funcs[j](2);

我希望现在越来越清楚了。当然,您始终可以通过在显式数据对象(示例中的字符串)中捕获它们的状态并将它们作为额外参数(您移动的 console.log )传递给普通函数来避免闭包进入循环)否则你只会执行闭包。

关于javascript - 为什么在这个例子中会返回一个函数而不是一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25585192/

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