2014-10-20 57 views
2

爲什麼下面的代碼不提示未定義?如何在JavaScript中爲參數賦值給具有相同名稱的變量?

function test(param){ 
    var param = param; 
    alert(param); 
} 
test("SO"); // alerts SO 

這怎麼正在被分配給本地變量的參數是與函數的參數相匹配,而不是與局部變量本身?
權值是否具有函數參數的「匹配偏好」或原因是什麼?

+0

該代碼不會返回'undefined'警報關閉後。 – Andy 2014-10-20 12:31:58

+0

你是對的,我沒有清楚地表達自己,已經根據我的意思編輯我的問題。 – 2014-10-20 14:43:32

回答

2

有兩個部分

var param = param; 

第一個是VAR聲明:

var param; 

第二個是assignement:

param = param; 

的VAR聲明不做任何事,因爲變量已經存在(變量的範圍是整個函數調用)。這個分配沒有作用,因爲它保持了同樣的價值。

您可以檢查通過分配不同的值:

function test(param){ 
    console.log('1', param) // logs "SO" 
    var param = param+"4"; 
    console.log('2', param) // logs "SO4" 
} 
test("SO"); 
+0

「變量的範圍是整個函數的調用」我不知道我是否正確,它是否意味着函數參數在函數內部被隱式聲明? – 2014-10-20 14:19:30

+0

是的,函數參數被聲明爲變量(這也意味着你可以改變它們的值)。 – 2014-10-20 14:22:57

+0

太棒了!接受你的答案。 – 2014-10-20 14:38:50

相關問題