JavaScript方法在调用执行的时候不会立即执行,而是会经过一层一层的解析再执行。
通过一个面试题例子来看:
function f(age) {
console.log(age);
var age = 2;
console.log(age);
function age() {}
console.log(age);
}
f(1);
问:调用f的过程中,后台console三次分别弹出了什么?
答案是:
function age() {} ; 2 ; 2
我们知道JavaScript函数在调用之前不会立即执行,
在形成调用瞬间存在一个active object(以下简称ao)。
他会根据3个过程分析:
形式参数——局部变量——声明表达式。
而且在每步骤的最前面,会先把所有的变量先声明为undefined。
以此来看:
1、解析形式参数,此时在内存中从上到下依次会产生这两个形式参数的定义:
ao.age = undefined;
a