2012-11-03 43 views
-1

我讀專業的JavaScript的Web開發者JavaScript的標識查找

有什麼奇怪的。

var color = "blue"; 

function getColor() { 
    var color = "red"; 
    return color; 
} 

getColor(); // "red" 

答案很明顯。但下面的解釋很奇怪。 「如果其中一個操作數是一個對象,另一個操作數不是,則會根據先前的規則在對象上調用valueOf()方法來檢索要比較的基本值。」

我只是不明白。很明顯,發生了什麼,它會返回本地顏色。

+4

該解釋與示例代碼沒有任何關係。 – xdazz

+0

我在代碼中看不到雙操作數表達式 –

+0

<有一個註釋,暗示有兩個操作數賦值表達式>按照ECMAScript規範,它們是'可變語句'。每個由「標識符」和「初始化程序」組成。 '初始化器'由'='符號和'賦值表達式'組成,在這種情況下,它是一個簡單的字符串文字。 –

回答

0

你是絕對正確的,它總是會返回紅色。在這種情況下,雖然技術上正確,但解釋不合適。哎,記住所有這些東西並不會被誤導,這很難。

0

當在內部作用域中定義的變量或函數參數與作用域之外的變量/參數具有相同名稱時,該變量將會掩蓋另一個變量。但是,一旦你回到了外部範圍,前一個變量仍然是初始值。沒有什麼比你的例子。這只是兩個任務和一個函數聲明。

var color = ...表示正在創建新變量。如果我們做了而不是var關鍵字,那麼調用該函數時,外部作用域中的變量color將具有更改的值。但是我們只創建一個局部範圍的變量,一個不會干擾另一個變量。

+0

我知道你的意思。但正如作者所說,(如果**操作數**指向顏色),如果其中一個顏色是對象而另一個不是,則valueOf方法將被調用並且..... – luthur

0

你的代碼是這樣

var color = "blue"; 

function getColor() { 
    var color = "red"; 
    return color; 
} 

getColor(); // "red" 

回答 顏色變量總是包含紅色,如果你從函數調用,因爲它是在本地聲明和定義。

但調用函數後,如果要獲取顏色值,則其值將變爲藍色。