函数声明和声明变量同时存在,提拔的划定规矩是什么?

这是一道新颖的方才出炉的问题,如今只要2个回复,处于未处理状况。
问题链接在这:https://segmentfault.com/q/10…
好奇心爆棚的我听着电音思索了一发,应当没错吧。

var a=1;
foo();
function foo(){};

起首,我们能够把它分为4块内容

var a ;
a =1;
foo();
function foo();

我们想知道提拔后排序是什么情势?
如今已知前提是,变量声明会提拔到变量赋值之前,所以我们能够先将变量声明放到前两位,临时不论其内部递次:

var a ;
function foo(){};
a=1;
foo();

接下来我们来离别肯定声明和赋值模块的内部排序。
为了举行试验,我们对foo函数举行扩大,所以如今的排序为:

var a;
function foo(){console.log(a+1)};
a=1;
foo();

先不要管为何这么改,我们继承试验,试验历程中会明白。
为了便于明白,试验分两次举行。
起首:我们对变量声明模块举行试验。

var a=1;
console.log(foo);//若输出为function foo(){}则证实函数声明位于变量声明之前;若为undefined,申明相反。
foo();
function foo(){console.log(a+1)};

然后:我们对变量赋值模块举行试验。

var a=1;
foo();//若输出为undefined1,则证实foo()在a=1之前;若输出为2,则申明a=1在foo()之前。
function foo(){console.log(a+1)};

下面来举行试验:

var a=1;
console.log(foo);//若输出为function foo(){}则证实函数声明位于变量声明之前;若为undefined,申明相反。
foo();
function foo(){console.log(a+1)};

VM1099:2 function foo(){console.log(a+1)}
VM1099:4 2

依据试验效果,我们末了得出的排序效果是:

function foo(){};
var a;
a=1;
foo();

总结和深思:

1.函数声明会提拔到变量声明之前。

2.提拔只针对的是声明部份,即涌现var funtion等的处所,后续的赋值和函数挪用根据当前默许递次顺次实行。
前端菜鸟一只,如有不对的处所请实时斧正!
期待与您交换!

——更新——2018.5.22——
结论是毛病的,原因是console.log()是异步函数,致使试验效果不准确。
准确结论是:function优先级比var高,不管在其前后,都邑覆蓋掉同名的var声明。

console.log(typeof foo);
var foo = "foo";
function foo(){}

输出:function

console.log(typeof foo);
function foo(){}
var foo = "foo";

输出:function

    原文作者:趁你还年轻
    原文地址: https://segmentfault.com/a/1190000009427673
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞