JS-作用域链

       function test(){
           for(var i=0;i<10;i++){
                for(var j=0;j<10;j++){
                    var temp=100;
                }
           }
           alert(j); //这样我们的值都能访问得到呀
           //这个就是函数作用域的
           alert(temp); // 居然能访问到该值滴呀
       }

 解释上面的现象:

1.javascript 中只有两种作用域:全局作用域和函数作用域;

 也就是说,for循环体中({})不能形成一个封闭额作用域与,

 它任然处于函数体内,所以......

2.因为 Javascript 没有块级作用域,只有函数作用域,所以闭包的使用与函数是紧密相关的

function test(){
    a=0; //在js中 函数体呢,申明变量,如果没有使用var关键字,那么他是全局变量;
    alert(a);  
  }
  var a=4; //全局a等于4
  test();  //当执行test时候,由于作用域链问题,它会再当前作用域中(也就是test)中寻找,没有,接着在父级找,找到了赋值,也就覆盖了全局的a
  alert(a);
   //结果 0 0
   
  var sValue=1000;
  function sm(){
    alert(sValue);   //这个是undefied,能够找到定义,单没有赋值
    var sValue=100;  //此处才赋值滴呀
    alert(sValue);   //100
      
  }
  sm();

 

posted @ 2015-09-15 14:43  咕-咚  阅读(126)  评论(0编辑  收藏  举报