JS作用域的问题(二)

来源:互联网 发布:冰毒 知乎 编辑:程序博客网 时间:2024/06/05 23:03

本以为理解了js作用域,但是在网上看了一篇文章之后又发现以前对js作用域的理解有一点不全面,遂写了这篇文章。

参考:JavaScript Scoping and Hoisting

首先你应该了解js是没有块级作用域的!

接着看下面一段代码,alert值应该是什么?

var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 

如果说这段代码的执行结果是10,你会不会有疑问?

在js中没有块级作用域,但是有函数作用域的,上面代码中的bar方法中的foo变量被提升了,可以这样理解:

var foo=1; function bar() {    //javascript没有块级作用域, 在一个函数内任何地方声明的var都会被提到函数的最开头    //相当于这里有一个 var foo;    alert(foo); //undefined, 因为函数内的var foo把外头的给覆盖了    if (!foo) {        var foo = 10; //相当于foo = 10; var foo的声明被提到最前    }    alert(foo);} bar();
你懂了吗

原创粉丝点击