2017-04-12 96 views
2

請解釋這個給我,爲什麼我得到0而不是5奇怪的結果與typeof和undefined

內的HTML文件:

<script> 
    var x = 5; 
</script> 
<div id="dv"></div> 

裏面的JS文件:

$(function() { 
    if(typeof x == 'undefined') { 
    var x = 0; 
    $("#dv").html(x); 
    } else if (x == 5) { 
    $("#dv").html(x); 
    } 
}); 

缺少什麼我在這裏?

+0

你在哪裏加載JS文件?在你分配'x'的腳本標籤之前或之後? – Ozan

+5

當然,在之前裝入'x = 5'的代碼之前,它會在IIFE – gurvinder372

+0

@Ozan中提升'var x' – blowz

回答

0

因爲variable hoisting in Javascript腳本是,就好像它是:

$(function() { 
    var x; 
    if(typeof x == 'undefined') { 
    x = 0; 
    $("#dv").html(x); 
    } else if (x == 5) { 
    $("#dv").html(x); 
    } 
}); 

所以x總是不等於undefined所以它永遠不會將其設置爲0。請注意,函數中的變量x與頁面中的變量x是不同的變量。這是因爲腳本中的變量是closed over進入功能範圍。


如果我理解你的問題正確的我會做這種方式:

<body data-x="5"> 
... 
<div id="dv"></div> 

$(function() { 
    var x; 
    if(typeof $('body').data('x') !== 'undefined') { 

    $("#dv").html($('body').data('x')); 
    } else { 
    $("#dv").html(0); 
    } 
}); 
+0

謝謝。那麼這有什麼解決方法 - 或者這僅僅意味着我將無法在調用函數內部使用'x = 5'的'x'?因爲如果我從調用函數中刪除'var',它確實可以工作 – blowz

+0

TBH這裏你的實際問題是什麼?爲什麼x不能被定義?這整個事情是一個[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Liam

+0

hehe :)嗯,我試圖操縱結果取決於我得到的動態變量。然後我想檢查結果。所以,如果我得到'x = undefined',我想將它定義爲'0',如果它在頁面上定義爲'x = 1',我想使用'if else'語句來輸出一些特定的結果。如果它與'x = 1'完全一樣,但輸出不同 – blowz