var change = function(fn) {
fn = function() { alert("success"); }; // 修改參數指向
};
var fun = function() { alert("ddd"); };
change(fun);
fun(); // 仍輸出 "ddd"
JavaScript 是值傳遞(Call by Sharing)。fn 是參數變量,持有函數對象的引用。fn = ... 只是讓局部參數指向新函數,不影響外部 fun 變量。
// 1. 返回新函數,外部重新賦值
var change = function(fn) {
return function() { alert("success"); };
};
fun = change(fun); // fun 現在指向新函數
// 2. 傳遞對象容器,修改屬性
var container = { fn: function() { alert("ddd"); } };
var change = function(obj) {
obj.fn = function() { alert("success"); };
};
change(container);
container.fn(); // "success"