一:作用域

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

 

 posted on 2017-11-17 16:29  前端爱好者~  阅读(287)  评论(0编辑  收藏  举报