JavaScript模仿块级作用域

对于其他语言,{ }内定义变量中括号内代码执行完毕后被销毁。而对JavaScript来说,并不会这样,因为JavaScript没有块级作用域。例如

if (true) { 
 var color = "blue"; 
} 
alert(color); //"blue"

这个例子中,if语句{ }内定义的color变量中if语句执行完之后仍然可以中全局环境中调用。这是因为if语句的并没有产生块级作用域。也就是说,块语句中定义的变量实际上上包含中函数或者全局环境中,而不是块语句中。这一点与其他语言不同,需要留意。

例如:

function outputNumbers(count){ 
 for (var i=0; i < count; i++){ 
 alert(i); 
 } 
 alert(i); //  输出0
}

这里for语句中定义了i=0,由于没有块级作用域,i存在于ouputNumbers()的活动对象中,函数内部随处可以访问到i,因此最后alert(i)是 0.

为了使得js具有块级作用域,可以使用匿名函数模仿块级作用域。形式如下:

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

以上代码定义并立即调用了一个匿名函数。将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式。而紧随其后的另一对圆括号会立即调用这个函数。

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

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

这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。

一般来说,我们都应该尽量少向全局作用域中添加变量和函数。在一个由很多开发人员共同参与的大型 应用程序中,过多的全局变量和函数很容易导致命名冲突。而通过创建私有作用域,每个开发人员既可 以使用自己的变量,又不必担心搞乱全局作用域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值