那些容易忽略的事3-(变量提升和函数提升)
1、变量提升:只要变量在代码中进行了声明,无论它在哪个位置上进行声明, js引擎都会将它的声明放在范围作用域的顶部;
console.log(a); //undefined var a;
2、函数提升:只要函数在代码中进行了声明,无论它在哪个位置上进行声明, js引擎都会将它的声明放在范围作用域的顶部;
console.log(b); //function b(){} function b(){};
从上可以看出,变量或函数声明都会别放到当前作用域的顶部,那么问题来了:如果变量和函数重名那么熟轻熟重呢?谁的优先等级更高呢?
var a; function a(){}; console.log(a); //function a(){} function b(){}; var b; console.log(b); //function b(){} var c=1; function c(){} console.log(c); //1 function d(){}; var d=1; console.log(d); //1
总结:变量申明和函数申明重名时,
不管二者声明的顺序,函数声明会覆盖变量声明,也就是说,此时a的值是声明的函数function a() {}。
注意:如果在变量声明的同时初始化a,或是之后对a进行赋值,此时a的值是变量的值。
也就是说:a===undefined ? a===函数 :a===变量