您的位置:首页 > Web前端 > JavaScript

javascript 模仿块级作用域

2015-08-13 11:06 459 查看
转自JavaScript高级程序设计i(第三版):

javascript没有块级作用域的概念,只有两个环境,函数环境和全局环境。

function test(){
for(var i=0;i<10;i++){

}
alert(i);//10
}


function test(){
for(var i=0;i<10;i++){

}
var i;//重新声明变量
alert(i);//10
}


Javascript从来不会告诉你是否多次声明了一个变量;遇到这种情况,它只会对后续的声明视而不见。

但是,如果在后续声明中对变量进行了初始化,也是会执行的。

function test(){
for(var i=0;i<10;i++){

}
var i=0;//重新声明变量
alert(i);//0
}


那么,应该如何模仿块级作用域呢?
用作块级作用域(通常称为私有作用域)的匿名函数的语法如下所示:

(function(){

//这里是块级作用域;

})();

但是,注意,以下代码会导致错误:

function(){

//这里是块级作用域;

}();//出错!!!

因为Javascript将function关键字当作一个函数声明的开始,而函数声明的后面不能跟圆括号。

但是,函数表达式的后面可以跟圆括号。要将函数声明转换为函数表达式,只需要像下文一样给它加上一对圆括号。

(function(){

//这里是块级作用域;

})();

无论什么地方,只要临时需要一些变量,就可以使用私有作用域。

function test(){
(function(){
for(var i=0;i<10;i++){
}
})();
alert(i);//导致一个错误!!!
}


在匿名函数中定义的任何变量,都会在执行结束的时候被销毁。
这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: