老規(guī)矩,先上代碼,幫忙指點(diǎn)下變量作用域?
<愛(ài)尬聊_百科詞條>
超級(jí)轉(zhuǎn)基因工作狂 22小時(shí)前
xuyiming0605 22小時(shí)前
泛濫情人 22小時(shí)前
(function(){ a = 5; alert(window.a); var a = 10; alert(a); })();
這段代碼中的alert,為什么第一個(gè)是返回的undefined.按說(shuō),不要VAR的a變量,不就是全局變量嗎?
超級(jí)轉(zhuǎn)基因工作狂 22小時(shí)前
程序執(zhí)行順序跟你想的不太一樣,程序是先聲明變量再進(jìn)行賦值,比如你寫(xiě)的,程序其實(shí)是這么執(zhí)行的,遇到a=5時(shí),其實(shí)是先聲明了一個(gè)全局變量a但是不賦值,然后繼續(xù)在下午又有一個(gè)var a就又聲明一個(gè)局部變量a然后下面沒(méi)有其他的聲明變量或者函數(shù)的代碼了才開(kāi)始進(jìn)行賦值操作,也就是說(shuō)賦值操作在最后,而你alert時(shí)還沒(méi)有賦值所以u(píng)ndefined,我是這么理解,其實(shí)就是變量聲明提升機(jī)制
xuyiming0605 22小時(shí)前
變量提升啊,下面有var a 啊,你知道變量提升嗎?
泛濫情人 22小時(shí)前
嗯,變量提升,變量聲明會(huì)提前到最前面,與輸寫(xiě)的順序無(wú)關(guān)。