首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6中'let‘关键字的作用域是什么(请参阅下面的代码片段)

ES6中'let‘关键字的作用域是什么(请参阅下面的代码片段)
EN

Stack Overflow用户
提问于 2018-05-09 03:10:57
回答 4查看 94关注 0票数 1

题目看起来直截了当,但这不是我要问的。请尝试以下示例

代码语言:javascript
复制
for(let i=0; i<5; i++){
	//console.log(i);
	let i=5	
	console.log(i);
}

这个例子是有效的,我的问题是如何在for循环中声明另一个具有相同标识符的变量。

我真的很困惑,这是怎么回事?

EN

回答 4

Stack Overflow用户

发布于 2018-05-09 03:24:06

有关for循环中let的语义,请参阅Explanation of let and block scoping with for loops

如何在for循环中声明另一个具有相同标识符的变量?

这是因为你的for循环有一个块语句作为它的主体,在那里你可以声明你自己的块范围的变量,隐藏来自父范围的变量。

票数 5
EN

Stack Overflow用户

发布于 2018-05-09 03:14:15

在下面的示例中,您将i的值设置为5,这样循环就结束了,因为这是循环i<5的条件。因此,循环再次运行的条件为false

代码语言:javascript
复制
for(let i=0; i<5; i++){
	//console.log(i);
	i=5	
	console.log(i);
}

在您的第一个示例中,循环继续,因为let i =5在for循环作用域中被视为一个单独的变量

票数 0
EN

Stack Overflow用户

发布于 2018-05-09 03:18:35

我认为下面的代码会消除你所有的疑虑,它都是关于scope的,你不能在相同的scope中重新定义相同的变量,但你可以在嵌套的scope中定义

在您的代码中也发生了同样的事情,for有自己的作用域,在for中意味着

代码语言:javascript
复制
for { //inside this } is  nested scope of `for`.

代码语言:javascript
复制
{
    let a = "a";
    console.log(a);
    {
        let a = "b";
        console.log(a);
    }
    console.log(a);
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50240765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档