博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数声明和声明变量同时存在,提升的规则是什么?
阅读量:6813 次
发布时间:2019-06-26

本文共 1254 字,大约阅读时间需要 4 分钟。

这是一道新鲜的刚刚出炉的题目,目前只有2个回答,处于未解决状态。

题目链接在这:
好奇心爆棚的我听着电音思考了一发,应该没错吧。

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

转载地址:http://mlzzl.baihongyu.com/

你可能感兴趣的文章
让sed帮我们提高工作效率
查看>>
记录一次linux线上服务器被黑事件
查看>>
Windows 7 暗藏的管理功能
查看>>
HP服务器 收集的日志
查看>>
是否是适合您的云计算解决方案?
查看>>
我的友情链接
查看>>
Linux 监控工具之Cacti使用详解(三)
查看>>
数据结构(C语言版)第四章:链表
查看>>
python核心编程:学习笔记4--函数和函数式编程
查看>>
CentOS7基于NFS服务的文件共享
查看>>
Linux passwd文件被清空
查看>>
Python OpenCV学习笔记之:图像阈值操作
查看>>
7月第1周中国.COM总量净增5.1万个 美国净减5.3万
查看>>
国内域名商.wang总量TOP10:易名中国跻身上榜
查看>>
5月钓鱼网站简报:共处理钓鱼网站2483个 环比下降
查看>>
10月国内网民上网时间分布:晚上8点出现峰值6.42%
查看>>
Echarts 基本设置 设置图表位置
查看>>
AliOS Things网络适配框架 - SAL
查看>>
Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本
查看>>
数组 将一个数组的元素和另一个素组的元素相加,然后赋给第三个数组
查看>>