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