那些容易忽略的事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===变量

posted @ 2016-07-08 11:59  谢小宝  阅读(137)  评论(0编辑  收藏  举报