在进行这个话题前,先给出这么一个例子:
感觉很简单?肯定不会,不然就不会写这篇文章了。
想想,然后在控制台上运行一下,看看结果怎么样。或许你会惊讶,但为什么会是这样子的呢?
好了,我们就开始讲讲在Javascript中,函数执行前到底做了写什么。
作用域链(scope chain)
每个函数在创建之初都构造一个自己的作用域链。
预解析
也有人叫预编译。 就是在函数执行前写解析前按顺序存储三种类型的变量。
- 一是,arguments里的变量。
- 二是,function变量。
- 三是,var定义的变量。
如果三者有重复的话,下面的覆盖前面的。
这样以来,上面的答案就出来了。
我讲的可能不够好。强烈推荐去阅读下面的一个参考文章。