JS变量提升

https://img1.mukewang.com/5caaea090001a26604650233.jpg

有哪位大神知道为什么最后一个console.log会报错
我自己尝试了debugger
发现if语句进不去,a是等于1的

拉风的咖菲猫
浏览 412回答 6
6回答

心有法竹

a++ 是 0,然后 a 是 1

收到一只叮咚

a++后自增,先参与运算,然后在自身加1.

慕容708150

你把var a=0 改成 var a=1试一试。

繁星点点滴滴

因为if (a++) {}的时候a还是0,所以直接执行下面的console.log(a())

梦里花落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// 报错
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript