gpt4 book ai didi

javascript - 为什么在 Javascript 中,作用域是函数级的,而不是 block 级的?

转载 作者:行者123 更新时间:2023-11-29 18:36:25 24 4
gpt4 key购买 nike

在问题中

Javascript infamous Loop issue?

Christoph 接受的答案说

JavaScript's scopes are function-level, not block-level

如果 Javascript 的作用域是 block 级的,那么 Infamous Loop 问题还会发生吗?或者会有不同的(更简单的)修复方法吗?

它是否与其他语言相反,在其他语言中使用 { 会启动一个新的范围?

最佳答案

我找到了答案:

Javascript 1.7及以上支持 block 级作用域,Firefox 3.0及以上支持。 (参见 http://en.wikipedia.org/wiki/Javascript#Versions)

我使用 Firefox 3.5.9 尝试了以下代码:
请注意,使用了关键字 let,这将创建一个 block 级作用域。

<a href="#" id="link1">ha link 1</a>
<a href="#" id="link2">ha link 2</a>
<a href="#" id="link3">ha link 3</a>
<a href="#" id="link4">ha link 4</a>
<a href="#" id="link5">ha link 5</a>


<script type="application/javascript;version=1.7"/>

for (i = 1; i <=5; i++) {
let x = i;
document.getElementById('link' + i).onclick = function() { alert(x); return false; }
}

</script>

果然,一个新的作用域被创建了,里面有一个新的x。执行 alert(x) 的匿名函数捕获此作用域(整个作用域链)并记住它,从而形成闭包。当这个匿名函数被调用时,作用域就在那里,当它查找x时,果然x在那个作用域中为1、2、3、4 , 5 分别。尝试将 let 更改为 var,您又会遇到臭名昭著的老问题,因为没有创建新的作用域。

关于javascript - 为什么在 Javascript 中,作用域是函数级的,而不是 block 级的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723621/

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