JavaScript历来只提供函数作用域和全局作用域来控制变量的作用域和生命周期。例如,你在if声明内定义一个变量,这个变量在外部也是可以访问的,不管方法体有没有被执行。例如:
if( false ) {
var x= "hello";
}
console.log(x)
该代码不会失败,它会在控制台中输出undefined,这种行为是引发许多bug的原因,这就是ES2015引入let关键字来声明遵守块作用域的变量。我们用let代替var
if( false ) {
let x= "hello";
}
console.log(x)
以上代码将引发错误:x未定义
let的这种保护行为迫使我们编写更安全的代码,因为如果我们不小心访问了属于另一个作用域的变量,我们将得到一个错误的提示,这样就很容易发现错误,从而避免隐形错误
,
JavaScript历来只提供函数作用域和全局作用域来控制变量的作用域和生命周期。例如,你在if声明内定义一个变量,这个变量在外部也是可以访问的,不管方法体有没有被执行。例如:
if( false ) {
var x= "hello";
}
console.log(x)
该代码不会失败,它会在控制台中输出undefined,这种行为是引发许多bug的原因,这就是ES2015引入let关键字来声明遵守块作用域的变量。我们用let代替var
if( false ) {
let x= "hello";
}
console.log(x)
以上代码将引发错误:x未定义
let的这种保护行为迫使我们编写更安全的代码,因为如果我们不小心访问了属于另一个作用域的变量,我们将得到一个错误的提示,这样就很容易发现错误,从而避免隐形错误