Javascript 理解Let范围
我对代码的假设是,对于第二个Javascript 理解Let范围,javascript,variables,ecmascript-6,variable-declaration,Javascript,Variables,Ecmascript 6,Variable Declaration,我对代码的假设是,对于第二个让x它上面的代码处于时间死区。因此不应抛出错误 代码 函数f(条件x){ 如果(条件){ 设x=100; 返回x; } 设x=30;//这里的问题是,您在同一个函数中对同一变量x重新声明了两次,因此变量x将被提升 if (condition) { //This x declaration is fine as it wasn't preceded with any others declaration inside the same block scop
让x
它上面的代码处于时间死区。因此不应抛出错误
代码
函数f(条件x){
如果(条件){
设x=100;
返回x;
}
设x=30;//这里的问题是,您在同一个函数
中对同一变量x
重新声明了两次,因此变量x
将被提升
if (condition) {
//This x declaration is fine as it wasn't preceded with any others declaration inside the same block scope
let x = 100;
return x;
}
//Now this second x declaration will cause the hoisting problem
let x = 30; // <---- throw error
if(条件){
//这个x声明很好,因为它前面没有在同一块范围内的任何其他声明
设x=100;
返回x;
}
//现在,第二个x声明将导致吊装问题
设x=30;//这里的问题是,您在同一个函数
中对同一变量x
重新声明了两次,因此变量x
将被提升
if (condition) {
//This x declaration is fine as it wasn't preceded with any others declaration inside the same block scope
let x = 100;
return x;
}
//Now this second x declaration will cause the hoisting problem
let x = 30; // <---- throw error
if(条件){
//这个x声明很好,因为它前面没有在同一块范围内的任何其他声明
设x=100;
返回x;
}
//现在,第二个x声明将导致吊装问题
设x=30;//问题似乎是因为x已经是一个函数参数,与外部x具有相同的范围。如果我用y更改函数参数x,代码工作正常
代码
函数f(条件,y){
如果(条件){
设x=100;
返回x;
}
设x=30;//问题似乎是因为x已经是一个函数参数,与外部x具有相同的范围。如果我用y更改函数参数x,代码工作正常
代码
函数f(条件,y){
如果(条件){
设x=100;
返回x;
}
设x=30;//let
为“块范围”-我知道let is block scoped所以@aWebDeveloper有什么混淆?检查作用域,同一作用域中的var let
将出错。但是不同作用域中的var let
是可以的。简言之,let/const
在同一作用域中不起作用。临时死区
如果您从未声明参数,这将是错误的<代码>x
。让
为“块范围”-我知道let is block scoped所以@aWebDeveloper有什么混淆?检查作用域,同一作用域中的var let
将出错。但是不同作用域中的var let
是可以的。简言之,let/const
在同一作用域中不起作用。临时死区
如果您从未声明参数,这将是错误的x
。您可以去掉if(condition)
位,因为这不是它所抱怨的x
。例如,这很好{let x=0;{let x=0;}
这是错误的。没有使用let
/const
进行提升。该问题是由传入的参数x
引起的,该参数与第二个let
声明的范围相同。let
/const
表示只能绑定名称(x
)一旦在同一范围内。您可以去掉if(condition)
位,因为它所抱怨的不是x
。例如,这很好{let x=0;{let x=0;}
这是错误的。没有使用let
/const
进行提升。该问题是由传入的参数x
引起的,该参数与第二个let
声明在同一范围内处于相同的范围。let
/const
意味着您只能在同一范围内绑定一个名称(x
)。