猿问
JS变量提升
有哪位大神知道为什么最后一个console.log会报错
我自己尝试了debugger
发现if语句进不去,a是等于1的
拉风的咖菲猫
浏览 412
回答 6
6回答
心有法竹
a++ 是 0,然后 a 是 1
0
0
0
收到一只叮咚
a++后自增,先参与运算,然后在自身加1.
0
0
0
慕容708150
你把var a=0 改成 var a=1试一试。
0
0
0
繁星点点滴滴
因为if (a++) {}的时候a还是0,所以直接执行下面的console.log(a())
0
0
0
梦里花落0921
这里有两个坑:一、在变量提升过程中有这样的顺序,函数形参 > 函数 > 变量,另外,赋值操作会覆盖声明过程。针对这题相当于:function a(){}var a;a = 0;// 这里的赋值操作会覆盖前面声明的function a,....二、js 引擎编译过程的差异代码:console.log(a);var a = 0;console.log(a);if (a++) { function a() {console.log('function a')};}console.log(a());chrome v8会在编译对不执行代码(dead code)(这里时条件为false)进行优化,我的理解是这里function a(){} 这段被去除。所以这里function a 在执行时就不存在提升了。undefined0// 报错IE Chakra(我在IE11进行了测试) 会把function a(){} 编译进去,就是和我们预期的函数、变量提升相同。function a() {console.log('function a')};0// 报错
0
0
0
随时随地看视频
慕课网APP
相关分类
JavaScript
我要回答