一:作用域
在ES6之前,javascript没有块级作用域(一对{}即为一个块级作用域),只有全局作用域和函数作用域(局部),因此,对应的有全局变量和局部变量。在函数内部可以访问到全局变量,但在函数外部,访问不到局部变量;
(思考:
function test(){
console.log(i); //?
console.log(num);//?
for(var i=0;i<1;i++){
var num=i;
}
}
)
二:链式作用域结构
在js中,变量查找遵循就近原则,如果同级没有该变量,则就一层一层向父级层查找,直到找到为止,所以,父级的变量对于子级都是可见的;
三:变量提升
在js解析时,在函数内部定义的变量都会提升到该函数的最开始的地方进行申明,在执行到时再进行赋值操作。
console.log(global);
// undefined
var
global =
'global'
;
console.log(global);
// global
console.log(a); // error
function
fn () {
console.log(a);
// undefined
var
a =
'aaa'
;
console.log(a);
// aaa
}
fn();