js中变量的作用域、变量提升、链式作用域结构

时间:2023-03-08 22:32:31
js中变量的作用域、变量提升、链式作用域结构

一:作用域

在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();