在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ JS變量提升

JS變量提升

圖片描述

有哪位大神知道為什么最后一個(gè)console.log會(huì)報(bào)錯(cuò)
我自己嘗試了debugger
發(fā)現(xiàn)if語(yǔ)句進(jìn)不去,a是等于1的

回答
編輯回答
敢試

a++ 是 0,然后 a 是 1

2017年6月6日 02:25
編輯回答
陌南塵

a++后自增,先參與運(yùn)算,然后在自身加1.

2017年2月12日 18:12
編輯回答
尐潴豬

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

2017年12月6日 03:26
編輯回答
澐染

因?yàn)?code>if (a++) {}的時(shí)候a還是0,所以直接執(zhí)行下面的console.log(a())

2017年4月14日 15:26
編輯回答
有你在

這個(gè)題目典型的考察js變量提升,注意,js變量提升只是大家常見(jiàn)的說(shuō)法,嚴(yán)謹(jǐn)?shù)恼f(shuō)這種類(lèi)型的題還是考察js的底層執(zhí)行過(guò)程,就是js代碼是如何被解釋、編譯(可能有人會(huì)說(shuō):fuck,js會(huì)編譯?開(kāi)什么玩笑...,我呵呵...)、執(zhí)行一整套完整流程,現(xiàn)在我們就按照變量提升的說(shuō)法來(lái)解釋

這里特別說(shuō)明,樓主的測(cè)試應(yīng)該是在chrome中進(jìn)行的,你在ie中試試,第一個(gè)console.log應(yīng)該是打印一個(gè)函數(shù),ie和標(biāo)準(zhǔn)瀏覽器對(duì)if這種條件的變量、函數(shù)預(yù)解析方式不一樣

可以查看資料:https://segmentfault.com/a/11...

2017年6月22日 00:21
編輯回答
帥到炸

這里有兩個(gè)坑:
一、在變量提升過(guò)程中有這樣的順序,函數(shù)形參 > 函數(shù) > 變量,另外,賦值操作會(huì)覆蓋聲明過(guò)程。
針對(duì)這題相當(dāng)于:

function a(){}
var a;
a = 0;// 這里的賦值操作會(huì)覆蓋前面聲明的function a,
....

二、js 引擎編譯過(guò)程的差異
代碼:

console.log(a);
var a = 0;
console.log(a);
if (a++) {
    function a() {console.log('function a')};
}
console.log(a());
  • chrome v8會(huì)在編譯對(duì)不執(zhí)行代碼(dead code)(這里時(shí)條件為false)進(jìn)行優(yōu)化,我的理解是這里function a(){} 這段被去除。所以這里function a 在執(zhí)行時(shí)就不存在提升了。
undefined
0
// 報(bào)錯(cuò)
  • IE Chakra(我在IE11進(jìn)行了測(cè)試) 會(huì)把function a(){} 編譯進(jìn)去,就是和我們預(yù)期的函數(shù)、變量提升相同。
function a() {console.log('function a')};
0
// 報(bào)錯(cuò)
2017年9月26日 22:54