为什么这样写变量可以取到?

勇敢的少年
  • 989
for(var i =1,sum=0; i<1000;i++){
    sum+=i;
}
console.log(sum,i);

这里的sum和i应该是for局部中定义的
为什么可以在外面拿到?

回复
阅读 1.7k
7 个回答
✓ 已被采纳

var声明会提升到作用域顶部,如果希望将变量限制在块级作用域那就应该用let

这里的sum和i应该是for局部中定义的
为什么可以在外面拿到

能在外面取到不是局部的,在外面取不到是局部的,很明显代码可以在外面取到那这个声明就不是局部的

这个。。不太理解你在疑问什么

在 js 中,for 循环语句块,不会创建一个作用域,所以

for(var i=1, sum=0; i<1000; i++){
    sum+=i;
}

var i=1;
var sum=0;
for(i,sum; i<1000; i++){
    sum+=i;
}

没有区别。
这算是 ES6 之前的一个语言坑,要给 for 循环创建块级作用域,需要把 var 换成 let

liaojie
  • 2
新手上路,请多包涵

了解一下var的变量提升

注意这里for预计还是对应于与for同级的环境,所以其中的var等效在于for同级语句块中。
这里其实应该用let才准确。

王静
  • 2
新手上路,请多包涵

var 存在变量提升
let的话就不存在了
你可以试试

1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;
2.使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;
如果把 var改成 let声明:i在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
for循环:设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏