JS-作用域划分

JS-作用域划分和其他语言不通的是,js的作用域是按函数来划分的;不像C 语言,java等高级语言,有严格的块级作用域的区分,在java中for或者if都算是一个独立的块级作用域,但是在JavaScript中if、for 语句中的花括号不是独立的作用域。JavaScript 的作用域完全是由函数来决定的。比如if(true){varname=’zhangsan’;}console.log

大家好,欢迎来到IT知识分享网。JS-作用域划分"

和其他语言不通的是,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
}


同样在
for
循环外面照样可以访问到局部变量
i
,那么在
js
中也想实现
java
中的效果:“想让
for
循环结束之后变量
i
就无法在
for
循环外访问了。可以实现吗???

答案是:当然可以!!

怎么实现那??需要通过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();


这里再
for
循环的外面在访问
i
就报
i
未定义的错误了

 

由此可知:js如果 想让一段代码中的局部变量,在这段代码之外不被访问到,就可以通过自执行函数表达式来实现;这样往往能够避免和外部代码发生冲突。

 换句话说可以通过 js中的自执行函数表达式 来实现java等高级语言中的块级作用域

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23183.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信