巧用匿名函数来解决javascript没有块级作用域的问题
2015-01-05 21:50
288 查看
在javascript中没有块级作用域,这句话怎么理解呢?
举个例子吧:
运行上面的代码,假如javascript有块级作用域的话,那么下面的控制台输出语句应该是undefined.那时因为块级作用域执行完成后,里面的变量都将被销毁。
但实际上,控制台输出的是100,这是为什么呢?就是没有块级作用域,所以导致i这个变量没有被销毁,所以在下面我们就能访问到这个变量。
那如何解决这个问题呢。我们可以通过匿名函数自调用来解决这个问题。首先我们要确认一点的是,虽然js没有块级作用域,但是有函数作用域。
举个例子:
通过上面的例子,我们可以知道,当foo函数执行完成后,函数内的变量将被销毁掉。这也就是下面控制台输出得到undefied的原因。
结合上面的知识点,我们就可以使用匿名函数自调用来解决我们提出的问题了。
代码如下:
ps:js菜鸟一枚,有错误,请大牛慷慨指点。
举个例子吧:
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菜鸟一枚,有错误,请大牛慷慨指点。
相关文章推荐
- javaScript没有块级作用域
- javascript没有块级作用域
- 关于JavaScript没有块级作用域的分析
- JavaScript没有块级作用域
- JavaScript没有块级作用域
- 【JavaScript学习】注意JavaScript没有块级作用域
- JavaScript没有块级作用域
- 在JRE1.4.2以上版本中解决Javascript调用已签名Applet方法时提示没有权限问题
- 为什么JavaScript没有块级作用域
- Javascript中没有块级作用域(模仿)
- 用javascript读取xml,并进行修改xml数据,解决保存没有权限问题
- javascript 没有块级作用域 JavaScript声明全局变量三种方式 及
- JavaScript匿名函数之模仿块级作用域
- JavaScript没有块级作用域
- javascript中变量没有块级作用域---函数内申明的变量在整个函数中都有效!
- 没有块级作用域的javascript...
- JavaScript没有块级作用域
- Javascript中没有块级作用域(模仿)
- 关于JavaScript中没有块级作用域的理解
- if没有块级作用域。导致变量冲突,造成的一些的问题。