美文网首页Web前端之路让前端飞Web 前端开发
函数声明和声明变量同时存在,提升的规则是什么?

函数声明和声明变量同时存在,提升的规则是什么?

作者: 趁你还年轻233 | 来源:发表于2017-05-15 22:05 被阅读47次

这是一道新鲜的刚刚出炉的题目,目前只有2个回答,处于未解决状态。
题目链接在这:https://segmentfault.com/q/1010000009426686
好奇心爆棚的我听着电音思考了一发,应该没错吧。

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等的地方,后续的赋值和函数调用按照当前默认顺序依次执行。

前端菜鸟一只,若有不对的地方请及时指正!
期待与您交流!

相关文章

  • 函数声明和声明变量同时存在,提升的规则是什么?

    这是一道新鲜的刚刚出炉的题目,目前只有2个回答,处于未解决状态。题目链接在这:https://segmentfau...

  • 引用类型

    变量提升和函数声明提升   函数声明提升就是把函数声明提升到函数声明所在作用域中(或者说一个函数体内)的顶端,变量...

  • 简短记录

    1、let声明的变量不存在变量提升,var声明的变量存在变量提升,当使用function定义时,这个函数都会 被...

  • js的提升

    JavaScript 会将函数声明和变量声明提升到当前作用域的顶部。变量赋值不会提升。在脚本的顶部声明函数和变量,...

  • 变量函数提升

    变量被提升 因为变量声明和函数声明会被解释为: 函数被提升 声明式函数会自动将声明放在前面并且执行赋值过程,而变量...

  • JavaScript 函数声明与函数表达式的区别

    函数声明 存在函数提升(同比于变量提升) 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪...

  • js原生

    三种定义函数的方式 变量声明提升 在函数体内部,声明变量,会把该声明提升到函数体的最顶端。 只提升变量声明,不赋值...

  • JS笔记 命名问题

    JS中函数和变量重名时,后声明的覆盖先声明的,后赋值的覆盖先赋值的。 变量提升和函数提升时,变量的声明是在函数的声...

  • js函数

    函数声明和函数表达式有什么区别 函数声明: 函数表达式: JavaScript 解释器中存在一种变量声明被提升的机...

  • JS变量声明提升和函数声明提升

    JS代码分为两个阶段:编译阶段和执行阶段; 编译阶段:会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作...

网友评论

    本文标题:函数声明和声明变量同时存在,提升的规则是什么?

    本文链接:https://www.haomeiwen.com/subject/mhkkxxtx.html