请先看一段代码
下面的这段代码输出的是undefined吗?
var haha = '666';
var haha;
console.log(haha);
上面的这段代码实际输出的是666,而不是undefined,这是为什么呢?为什么var又可以重复定义呢?
var为什么可以重复定义?
我们首先介绍下JS代码的运行机制:
- 引擎负责整个代码的编译和执行。
- 编译器负责语法分析、词法分析、代码生成等。
- 作用域负责维护所有的标识符变量。
编译器在对代码进行拆解的时候,遇到了var定义的变量会首先询问作用域中是否存在这个变量,不存在就让作用域创建变量,如果存在就忽略var继续编译,赋值时haha='666’被执行,第二个var haha被编译器忽略了。