js通过匿名函数来模仿块级作用域实现作用域私有

JS本身并没有块级作用域的概念,因此在块语句中定义的变量实际上是包含在函数中,并不是在语句中创建的。通过一段典型的代码:
function testFun(){
    for(var i = 0;i < 10; ++i){
        alert(i);
    }
    alert(i)  // 10
}

在C/java/C++中最后的alert(i)将会报错,但是在js中只要变量已经定义过,在其活动对象中就可以随处访问到他。从某些方面来讲,有潜在的风险隐藏其中。解决这个问题可以通过匿名函数模仿块级作用域来实现。

块级作用域或说私有作用域的匿名函数语法:

(function(){
  //块级作用域/私有作用域
})()
圆括号将函数声明变成了一个函数表达式,没有外层的圆括号编译器会报错,js将function看作是一个函数声明的开始,而函数声明不允许以一个小括号结束。

在定义了上述匿名函数后,就可以在块级作用域内添加拥有私有作用域的变量

function testFun(){
    (function(){
         for(var i = 0;i < 10; ++i){
            alert(i);
         }
      })()

    alert(i)  // error
}
变量i拥有了自己的私有作用域!

通过匿名函数来模仿块级作用域实现作用域私有 常用于在全局作用域中、函数外定义变量时使用,通过这种方式避免变量命名冲突,这种做法还可以减少闭包占用内存的问题,因为没有了指向匿名函数的引用,匿名函数执行完毕,其作用域链马上就销毁了。
--参考《JavaScript高级程序设计.3》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值