JS中的变量作用域问题
JS中的变量是函数作用域,在嵌套作用域中创建的变量可用于整个函数。
代码伺候:
如下:
function f1(){
var n = 5;
if(true){
var n = 10;
}
console.log(n); // 10
}
f1();
结果输出 10,原因是if语句中的变量 n 覆盖了外层的变量 n ;
在ES6中,改用let定义变量,
function f1(){
let n = 5;
if(true){
let n = 10;
}
console.log(n); // 5
}
f1();
输出结果是所期望的。
使用var声明变量和使用let声明变量的一个区别就在于,前者是函数作用域,后者是块级作用域额,而且是在块中所出现的位置上初始化。因此对于使用let声明的变量,你无法在声明之前进行访问。而使用var生命的变量,访问顺序并不重要。
function fooey(){
console.log(foo);
let foo = 100;
}
fooey();
报错。下面看看使用var定义变量
function fooey(){
console.log(foo);
var foo = 100;
}
fooey();
输出undefined
下面再看一个例子:
for(var i = 0; i<5; i++){
console.log('hello'+i);
}
console.log(i);
输出如下:

改用let定义变量:
for(let i = 0; i<5; i++){
console.log('hello'+i);
}
console.log(i);
输出如下:

因为i是let创建的,故其作用域被限制在for循环中,该变量在作用域中之外是不可见的。

浙公网安备 33010602011771号