javascript 模仿块级作用域

转自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);//导致一个错误!!!
}

在匿名函数中定义的任何变量,都会在执行结束的时候被销毁。

这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值