我知道JavaScript總是通過引用傳遞對象。但其他類型呢?何時複製值?
number - ?
字符串 - 不可阻擋,所以它應該沒有關係
object-ref
array - ?
功能 - ?
regexp - ?
我得出的結論是在Javascript中並不是所有的值可以是對象,也不能被引用與傳遞following code:
function SomeFunc(func) {
var numba = 0;
var innerFunc = function() {
numba = func(numba);//try commenting me out and switching to next line
//func(numba);//numba fails to increment
return numba;
};
return innerFunc;
}
//this variable should persist the numba variable through closure. Incrementing each call by 1.
var closure = SomeFunc(function(numba) {
numba = numba + 1;
return numba;
});
document.writeln(closure());
document.writeln(closure());
document.writeln(closure());
因爲numba
沒有增加,除非我返回的數量和更新封閉中的變量...然後,這告訴我這不是通過引用傳遞。我錯過了什麼嗎?
或採取非常基本
function UpdateNumber(numba) {
numba = 10;
document.writeln('in func number becomes ' + numba);
}
var numba2 = 5;
UpdateNumber(numba2);
document.writeln('back to caller number is ' + numba2);
//in func number becomes 10
//back to caller number is 5
我通過電子郵件發送Douglas Crockford和他對這種情況的迴應是:「當你賦值給一個變量時,你給變量一個引用,當你傳遞一個變量作爲參數時,變量本身。「我相信這個問題僅僅是我還有很多東西需要學習。 –