当 变量名 和 函数名 重名时 :
在变量和函数声明定义之前,访问使用这个名字,访问使用的都是 函数
因为 在 提升阶段 函数优先。
在执行过这个名字变量声明赋值这一句之后,访问使用这个名字,访问使用的都是 变量
因为 在 执行阶段 变量优先 。
怎么区分在 提升阶段 还是在 执行阶段?
就关注一点,是在这个重名的变量声明赋值之前还是之后
之前就算 提升阶段
之后就算 执行阶段
console.log(abc); //调用了整个函数:ƒ abc(){console.log('abc函数被调用了');}
abc();//xyz函数被调用了
//变量:
var abc = 'hello';
console.log(abc);//'hello'
//函数案例1:
function abc() {
console.log('abc函数被调用了');
}
console.log(abc);//'hello'
// abc();调用结果:Error: abc is not a function
console.log(xyz);//调用了整体 ƒ xyz(){console.log('xyz函数被调用了');}
//函数案例2:
function xyz() {
console.log('xyz函数被调用了');
}
console.log(xyz);//调用了整体 ƒ xyz(){console.log('xyz函数被调用了');}
xyz();
var xyz = 'hello';
console.log(xyz);//'hello'
xyz();//Error: xyz is not a function