函数的预处理
console.log(a) // 输出函数
var a = 5
function a () {}复制代码
function fn(a,b,a){
console.log(a);//function a(){}
console.log(arguments[0]);//1
console.log(arguments[2]);//function a(){}
function a(){
}
var a=5;
}
fn(1,2,3);
函数预处理:函数开始运行时会创建跟参数名相同的变量并赋值再和arguments对象产生引用关系。
预处理阶段 function 优先级最高 预处理阶段发生冲突的变量名,会被优先级高的忽略掉。
函数读取中 arguments 优先级是最高的 比function 还要高。
(1)函数参数名称重复
function fn(a,b,a){
console.log(a)
var a=10;
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments[2]);
}
fn(1,2,3); // 会输出什么?
函数fn(),arguments[0] 优先级是最高,此时输出1,由于函数预处理,所有此时a已经被重新赋值变成了10
预处理阶段将变量保存在window域:会产生变量提前和函数声明提前的效果。
window{
fs : 指向函数,
as : undefined,
gs : undefined
}
在执行阶段window域的情况