经常会犯错的js作用域

一下整理一些在js作用域知识中经常犯错的知识点:

1.

1
2
3
4
5
6
var a = 10;
function aaa() {
alert(a);//undefined,查找a的时候会现在函数内查找,由于预解析的作用,此时的a是undefined,因此永远不会去查找外面的10了
var a = 20;
}
aaa();

变量的查找是就近原则,去寻找var定义的变量,当就近没有找到的时候就去查找外层。

2.

1
2
3
4
5
6
7
function a1() {
var a=b=1
}

a1();
alert(a);//报错
alert(b);//1

在函数a1()外面无法读取变量a,而var a=b=10这种写法在函数内,b其实是全局变量