我想将函数引用“go”传递给另一个函数“redefineFunction”,并在“redefineFunction”内部重新定义“go”。根据 Johnathan Snook 的说法,函数是 passed by reference ,所以我不明白为什么当我将它传递给 redefineFunction() 时 go() 没有被重新定义。有什么我想念的吗?
// redefineFunction() will take a function reference and
// reassign it to a new function
function redefineFunction(fn) {
fn = function(x) { return x * 3; };
}
// initial version of go()
function go(x) {
return x;
}
go(5); // returns 5
// redefine go()
go = function(x) {
return x * 2;
}
go(5); // returns 10
// redefine go() using redefineFunction()
redefineFunction(go);
go(5); // still returns 10, I want it to return 15
或者看我的 fiddle http://jsfiddle.net/q9Kft/
最佳答案
Nerd 会告诉你 JavaScript 是纯值传递,但我认为 only clouds the issue因为传递的值(传递对象时)是对该对象的引用。因此,当您修改一个对象的属性时,您是在修改原始对象,但如果您完全替换该变量,您实际上是在放弃对原始对象的引用。
如果你试图在全局范围内重新定义一个函数:(这是一件坏事;你通常不应该有全局函数)
function redefineFunction(fn) {
window[fn] = function() { ... };
}
redefineFunction('go');
否则,您将不得不返回新函数并在调用方分配。
function makeNewFunction() {
return function() { ... };
}
go = makeNewFunction();
关于javascript - 我可以从另一个函数中重新定义一个 JavaScript 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535463/