javascript模仿块级作用域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript模仿块级作用域相关的知识,希望对你有一定的参考价值。

javascript没有块级作用域的概念,例如以下代码:

技术分享
function outputNumbers(count){
    for (var i=0; i < count; i++){
        alert(i);
    }

    alert(i);   //count
}
技术分享

不同于C、java语言,变量 i 在for循环外仍然能使用,变量 i 是定义在outputNumbers() 的活动对象中

 

匿名函数可以用来模仿块级作用域:

(function () {
    //这里是块级作用域
})();

以上代码定义了一个匿名函数并立即调用,相当于:

var someFunction=function(){
    //这里是块级作用域
}
someFunction()

 

用下面这里例子,说明匿名函数能模仿块级作用域的原理

技术分享
var i = 1;
(function() {
    var i = 2;
    console.log("内部:" + i); // 2
})();
console.log("外部:" + i); // 1
技术分享

技术分享

 

- 匿名函数执行过程中

  全局变量 i 被屏蔽:先搜索匿名函数活动对象,因为匿名函数的活动对象里有变量 i ,不会去搜索全局变量对象中的变量 i

- 匿名函数执行完毕后

  块内的资源会被释放:函数执行完毕后,局部活动对象会被销毁(这里是匿名函数的活动对象)

 

- 这种技术的好处

  限制向全局作用域中添加过多的变量和函数

以上是关于javascript模仿块级作用域的主要内容,如果未能解决你的问题,请参考以下文章

模仿块级作用域

匿名函数闭包模仿块级作用域,轻松解决开发中的两大难题

模仿块级作用域

javascript--特权方法

js作用域的相关知识

js私有作用域(function(){})(); 模仿块级作用域