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

巧用匿名函数来解决javascript没有块级作用域的问题

2015-01-05 21:50 288 查看
在javascript中没有块级作用域,这句话怎么理解呢?

举个例子吧:

for(var i = 0; i < 100; i++) {
//todo
}
console.log(i); //输出100

运行上面的代码,假如javascript有块级作用域的话,那么下面的控制台输出语句应该是undefined.那时因为块级作用域执行完成后,里面的变量都将被销毁。

但实际上,控制台输出的是100,这是为什么呢?就是没有块级作用域,所以导致i这个变量没有被销毁,所以在下面我们就能访问到这个变量。

那如何解决这个问题呢。我们可以通过匿名函数自调用来解决这个问题。首先我们要确认一点的是,虽然js没有块级作用域,但是有函数作用域。

举个例子:

function foo(){
var bar = "hello";
}
foo();
console.log(bar); //输出undefined

通过上面的例子,我们可以知道,当foo函数执行完成后,函数内的变量将被销毁掉。这也就是下面控制台输出得到undefied的原因。

结合上面的知识点,我们就可以使用匿名函数自调用来解决我们提出的问题了。

代码如下:

(function(){
for(var i = 0; i < 100; i++){
//todo
}
})();
console.log(i); //输出undefined。

ps:js菜鸟一枚,有错误,请大牛慷慨指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: