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
)。