根據JS預決議 以下代碼為什么會報一個Uncaught TypeError: test is not a function 這樣的錯誤呢?
test();
if(true) {
function test() {
alert('javascript')
}
}else{
function test(){
alert('node.js')
};
}
我原本是認為根據JS預決議, 函式宣告不是會被提升嗎? 是因為{ } 大括號的原因不能被提升到作用域的頂部嗎?
也就是根據函式宣告提升的話 應該是如下形式呀
function test() {
alert('javascript')
}
function test(){
alert('node.js')
};
test();//會正常的輸出node.js , 而前面那個函式被覆寫
if(true) {
}else{
}
但是換成以下代碼會正常輸出
if(true) {
function test() {
alert('javascript')
}
}else{
function test(){
alert('node.js')
};
}
test();
但結果好像不是這樣推理! 求大神解答 謝謝!!!
uj5u.com熱心網友回復:
你上來就test(),這個時候還沒加載完下面的部分。也就是test()函式內容還未被創建uj5u.com熱心網友回復:
我說了啊 這種代碼是正確的
if(true) {
function test() {
alert('javascript')
}
}else{
function test(){
alert('node.js')
};
}
test();
我的意思是 預決議函式宣告會提前的! 你把if去掉把函式呼叫寫上面也可以正確執行啊。!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/279761.html
標籤:JavaScript
上一篇:html基礎小白問題
