【总结】关于js变量提升

直接上代码例子1:

console.log(a);

输出结果是 报错


再看例子2:

console.log(a);

var a = 1;

输出结果是 undefined


其实例2等同于如下例3:

var a;

console.log(a);

a=1;

此处例2的变量a的定义就是被提升到最前面,效果和例3相同。


接下来看下经典的函数声明,

var test = function(){ ... }

function test(){ ... }

这两种写法到底有什么区别呢?

区别就在于变量提升的先后顺序!


请看例子4:

var test = function(){ console.log(1); }

function test(){ console.log(2); }

test();

输出结果是 1


例4中的第二个函数定义就是被提升到了最前面导致代码效果是这样的(例5):

function test(){ console.log(2); }

var test = function(){ console.log(1); }

test();

输出结果是 1

例5按顺序执行,函数test定义再定义,最后的test自然输出的是最后一次定义的结果(输出 1)。


再稍作修改,例6:

var test = function(){ console.log(1); }

test = function (){ console.log(2); }

test();

输出结果是 2

这个例6就很简单了,函数test定义再重新赋值(也可以说重新定义吧),输出的也是最后一次定义的结果(输出 2)。





posted @ 2018-01-08 15:59  Mr.Kay  阅读(307)  评论(0编辑  收藏  举报