首先,我引用一個(gè) testFunction.js 的文件潘鲫,里面的代碼如下:
function shallwego() {
return true
}
function gotopage1() {
if (shallwego) {
window.location = "http://www.reibang.com/p/dc062dd46e17"
}
}
gotopage1();
function gotopage2() {
m += 1;
}
gotopage2();
然后我在 html 文件( index.html )當(dāng)中翁逞,引入上述 js 文件,代碼如下:
<script src="../js/testFunction.js"></script>
然后文件的相對(duì)位置給你展示一下:
看到這里溉仑,我想問你一個(gè)問題挖函,如果我打開 index.html,結(jié)果會(huì)是什么樣的呢彼念?
先猜一下挪圾,不要說出來,
然后看下圖逐沙,看看和你想的結(jié)果是不是一樣的呢哲思?
為了方便打開頁面,我直接在網(wǎng)址中輸入本地文件的地址:
http://localhost:63342/learnnode/html/index.html?_ijt=alk3vcpo52stc41djq106cpn51
咦吩案?控制臺(tái)好像有一個(gè)錯(cuò)誤棚赔?看不清?
放大來看一些:
你可能會(huì)有疑問了,這不是 js 文件中關(guān)于第三個(gè)函數(shù)的報(bào)錯(cuò)嗎靠益?
可是我明明在第二個(gè)函數(shù)調(diào)用的時(shí)候丧肴,
就已經(jīng)通過 window.location 跳轉(zhuǎn)到其他頁面了呀,
怎么會(huì)繼續(xù)執(zhí)行原來 js 文件里面的函數(shù)呢胧后?
你可能想當(dāng)然的以為芋浮,第三個(gè)函數(shù)不會(huì)執(zhí)行,而是第二個(gè)函數(shù)執(zhí)行完了之后壳快,直接 window.location = "…"就跳轉(zhuǎn)走了纸巷。
但是實(shí)際上,在引用 js 文件的時(shí)候眶痰,你可以把它理解成瘤旨,這個(gè) js 文件相當(dāng)于一個(gè)大的函數(shù),不過竖伯,這個(gè)函數(shù)沒辦法 return存哲。 所以,在執(zhí)行引用的 js 文件的時(shí)候七婴,他不會(huì)看你其中的某個(gè)函數(shù)是否會(huì)有類似于中斷的功能(例如祟偷,window.location = “…”)。
他會(huì)一次性把所有的函數(shù)都過一遍之后本姥,再執(zhí)行其中的某個(gè)函數(shù)肩袍。
這就是為什么,明明在 js 文件中第二個(gè)函數(shù)是跳轉(zhuǎn)婚惫,反而第三個(gè)函數(shù)也會(huì)「執(zhí)行」氛赐,導(dǎo)致報(bào)錯(cuò)的根本原因。
那么先舷,知道了問題出在了哪里艰管,該如何解決呢?
第一種方法:拆分成兩部分蒋川,然后放到兩個(gè) js 文件中牲芋。如下圖:
我們?cè)俚綖g覽器中看一下,看看控制臺(tái)這次會(huì)不會(huì)報(bào)錯(cuò):
怎么樣捺球?是不是好了呢缸浦?
我們?cè)賮砜吹诙N方法:
我們可以通過判斷語句來達(dá)到類似于「控制代碼執(zhí)行」的作用,代碼如下:
function shallwego() {
return true
}
function gotopage1() {
if (shallwego) {
window.location = "http://www.reibang.com/p/dc062dd46e17"
}
}
if (true) {
gotopage1()
} else {
function gotopage2() {
m += 1;
}
gotopage2()
}
效果也是一樣的氮兵,你可以試一下裂逐。我這邊就不附圖了~
方法三:借用立即執(zhí)行函數(shù)
function shallwego() {
return true
}
(function() {
if (shallwego) {
window.location = "http://www.reibang.com/p/dc062dd46e17"
}
}());
function gotopage2() {
m += 1;
}
gotopage2();
立即執(zhí)行函數(shù)的好處是,可以在函數(shù)創(chuàng)建完之后就立刻調(diào)用泣栈。
不過我在實(shí)際使用的時(shí)候卜高,發(fā)現(xiàn)并沒有解決問題弥姻,報(bào)錯(cuò)還是一樣出現(xiàn):
可能是我的寫法不對(duì),
我有時(shí)間的話會(huì)研究一下關(guān)于立即執(zhí)行函數(shù)有關(guān)的知識(shí)掺涛。
最后庭敦,歡迎優(yōu)秀的你給我提出寶貴的意見和建議。
我會(huì)不斷的堅(jiān)持薪缆,將自己打磨的越來越優(yōu)秀秧廉。