JavaScript中没有直接的块级作用域,然而,可以使用匿名函数表
达式来模拟块级作用域,任何定义在匿名函数中的变量在匿名函数执行
完之后都将被销毁,在匿名函数外访问这些变量将会产生错误。如:
functionoutputNumbers(count)
{
(function()
{
for(vari=0;i<count;i++)
{
alert(i);
}
})();
alert(i); //causes an error
}
匿名函数表达式提供了创建私有作用域的方法。这种技术通常应用
在函数外部的全局作用域中,防止变量和函数添加到全局作用域中。在
大型应用中,可以避免命名冲突。如:
(function()
{
varnow=newDate();
if(now.getMonth()==0&&now.getDate()==1)
{
alert("Happy new year!");
}
})();
上例中,匿名函数内的now变量只能在匿名函数内被访问。成为
局部变量。
这种模式不会有闭包产生的内存问题,因为不存在对匿名函数的
引用。当函数执行完成后,作用域链将被立即销毁。
上例中的匿名函数实际上是一种立即执行的匿名函数表达式。