【发布时间】:2023-03-16 16:20:01
【问题描述】:
我想将函数引用“go”传递给另一个函数“redefineFunction”,并在“redefineFunction”中重新定义“go”。根据 Johnathan Snook 的说法,函数是 passed by reference,所以我不明白为什么当我将 go() 传递给 redefineFunction() 时不会重新定义它。有什么我遗漏的吗?
// 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
或者看我的小提琴http://jsfiddle.net/q9Kft/
【问题讨论】:
-
当对象通过引用传递时,你有一个对对象属性的引用,但是你不能用一个新的对象覆盖原来的引用。
-
@zzzzBov:嗯,你确实有一个对 object 本身的引用(不仅仅是它的属性),你只是不能覆盖这个对象。
-
@josh3736,是的,基本上我的意思是你没有指向对象的指针,你有对象。
标签: javascript function scope