变量对象VO的填充顺序
- 函数参数:若未传入,初始化该参数值为undefined
- 函数声明:提升声明和赋值。若发生命名冲突(如传入的参数有同名的变量,或arguments)会覆盖
- 变量声明:初始化变量值为undefined,若发生命名冲突,会忽略(即不会覆盖他的值为undefined)
function app(arg1, arg2) {
function arguments() {};
function arg1() {};
function arg3() {};
// 这里的arguments和arg1都被赋值为函数
var arg2, arg3;
// 这里的arg2发生命名冲突,但是不覆盖他的值
};
app(1,2);
命名函数表达式的标识符在函数内不可变
var a = function b() {
b =1;
console.log(b);
// function() {}因为在函数体内是不变的
};