爲什麼下面的代碼不提示未定義?如何在JavaScript中爲參數賦值給具有相同名稱的變量?
function test(param){
var param = param;
alert(param);
}
test("SO"); // alerts SO
這怎麼正在被分配給本地變量的參數是與函數的參數相匹配,而不是與局部變量本身?
權值是否具有函數參數的「匹配偏好」或原因是什麼?
爲什麼下面的代碼不提示未定義?如何在JavaScript中爲參數賦值給具有相同名稱的變量?
function test(param){
var param = param;
alert(param);
}
test("SO"); // alerts SO
這怎麼正在被分配給本地變量的參數是與函數的參數相匹配,而不是與局部變量本身?
權值是否具有函數參數的「匹配偏好」或原因是什麼?
有兩個部分
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");
「變量的範圍是整個函數的調用」我不知道我是否正確,它是否意味着函數參數在函數內部被隱式聲明? – 2014-10-20 14:19:30
是的,函數參數被聲明爲變量(這也意味着你可以改變它們的值)。 – 2014-10-20 14:22:57
太棒了!接受你的答案。 – 2014-10-20 14:38:50
該代碼不會返回'undefined'警報關閉後。 – Andy 2014-10-20 12:31:58
你是對的,我沒有清楚地表達自己,已經根據我的意思編輯我的問題。 – 2014-10-20 14:43:32