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等高级语言中的块级作用域

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值