和其他语言不通的是,,js的作用域是按函数来划分的;不像C语言,java等高级语言,有严格的块级作用域的区分,在java中for或者if都算是一个独立的块级作用域,但是在JavaScript中if、for语句中的花括号不是独立的作用域。JavaScript的作用域完全是由函数来决定的。比如
if (true) { var name = 'zhangsan';}console.log(name); // 输出 zhangsan
上面的代码在c语言和java中会出现变量未定义的错误,因为在Java中if(true){…}是独立的作用域,在if里面定义的变量,在if外面是访问不到的;但是在js中if不算独立的作用域,所以在if外面照样可以访问到局部变量name.在比如下面代码:
function test(){for(var i=1;i<5;i++){alert(i);}alert("外部调用 i 的值是:" + i); // 外部调用 i 的值是 5}
答案是:当然可以!!
怎么实现那??需要通过JavaScript中的自执行函数表达式,在这里如果不明白函数表达式和自执行是怎么回事的小伙伴请参考我的另一篇文章《js函数声明和函数表达式》
(function(){ for(var i=1;i<5;i++){ alert(i); }})();
这就是一个自执行的函数表达式
function test(){(function(){for(var i=1;i<5;i++){alert(i);}})();alert("外部调用 i 的值是:" + i);//这是再访问i,就访问不到了 } test();
当你感到悲哀痛苦时,最好是去学些什么东西。