今天群里有人問了一個(gè)很簡單(看似)的問題承二,下面的這段代碼alert的值是多少刊愚?
var number = 10;
var showNumber = function () {
alert(number);
}
(function () {
number = 20;
showNumber();
})()
按照正常的邏輯馍驯,number
是全局作用域的變量,又因?yàn)?code>number = 20;是在alert(number);
之前執(zhí)行群井,所以alert出來的值應(yīng)該是20
但是状飞,復(fù)制到console下執(zhí)行,alert出來的值卻是10书斜,而且關(guān)閉alert對話框之后诬辈,控制臺(tái)報(bào)錯(cuò)
VM232:9 Uncaught TypeError: (intermediate value)(...) is not a function
at <anonymous>:9:3
沒看懂這行l(wèi)og的意思,仔細(xì)想了好一會(huì)兒才明白荐吉,代碼執(zhí)行的順序和預(yù)期的是不一樣的焙糟,因?yàn)闆]有;
行結(jié)束符,所以實(shí)際執(zhí)行的時(shí)候是這樣的:
var number = 10;
var showNumber = ((function () {
alert(number);
})(function () {
number = 20;
showNumber();
}))()
其中
function () {
number = 20;
showNumber();
}
只是作為參數(shù)稍坯,本身并沒有執(zhí)行酬荞,所以number
值為1搓劫,而因?yàn)?/p>
((function () {
alert(number);
})(function () {
number = 20;
showNumber();
}))
執(zhí)行結(jié)果為undefined
瞧哟,不是方法,繼續(xù)執(zhí)行undefined()
報(bào)錯(cuò)