gpt4 book ai didi

JavaScript 函数在循环迭代器中循环问题?

转载 作者:行者123 更新时间:2023-11-28 13:47:24 24 4
gpt4 key购买 nike

这是我的代码:

function func(){
for(i=0; i < 5; i++){
alert('g');
}
}

for(i=0; i < 5; i++){
func();
alert('h');
}

我期望的是:ggggghggggghggggghggggghggggh

但是收到的只是gggggh

我发现这是因为 JS 中有函数作用域,而不是 block 作用域。我想知道的是如何保留这种行为。我的意思是强制像 block 作用域这样的东西。否则很容易产生非常讨厌的错误 - 例如使用别人编写的函数或您自己编写的函数时,但几个月前。

最佳答案

这实际上与函数与 block 作用域无关 - 它与隐式全局变量有关。

简短的故事:如果您使用 for(var i=0;而不是 for(i=0; 你会得到预期的结果。

稍长的版本:

alert("typeof i: " + typeof i);
// Alerts "typeof i: undefined"
function func() {
// References the *global* variable `i`
for(i=0; i < 5; i++){
alert('g');
}
}

// Creates a *global* variable `i` and sets it to 0
for(i=0; i < 5; i++) {
alert("i at start of iteration: " + i);
// Alerts "i at start of iteration: 0"
func();
// `func` has just altered *global* state - here's the proof
alert("i after call to func: " + i);
// Alerts "i at start of iteration: 5"
alert('h');
}
alert("typeof i: " + typeof i);
// Alerts "typeof i: number
// `i` is now in the global scope.

// Left as an exercise for the reader:
// try it again with `var i=0;` in both of the `for` loops.

关于JavaScript 函数在循环迭代器中循环问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13243907/

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