var声明与不声明的区别;
1.function A(){
function B(){
function C(){
a = 'a'
}
C();
}
B();
}
A();
console.log(a);
2.function A(){
function B(){
var a;
function C(){
a = 'a'
}
C();
}
B();
}
A();
console.log(a);
3.function A(){
function B(){
function C(){
var a = 'a'
}
C();
}
B();
}
A();
console.log(a);
- 不用var声明,js引擎就会先在当前作用域找到有没有a的声明,如果当前作用域没有,就会沿着作用域链向上找,如果找到就会赋值给a,如果找到了全局作用域还没有找到a的声明,全局作用域中就会自动创建一个具有该名称的变量声明,并将其返还给引擎,前提是程序运行在非严格模式下。
- 第二段代码由于在B函数的作用域内就找到了var a = undefined;所以就不会在全局作用域声明a;
- 如果在严格模式下,到了全局作用域如果还没有找到a的声明,就会直接报错。
通过这三段代码和这段文字细品var声明与不声明的区别