Javascript 保持函数引用

Javascript 保持函数引用,javascript,reference,closures,Javascript,Reference,Closures,新手的困境: var a = function() {console.log(5);} var b = a; a = function() {console.log(6);} 显然b==function(){console.log(5);} 问题是,我如何通过保留对原始函数的引用来包装/修改a,以便b也指向修改后的函数 这是不可能的。 Javascript不支持对变量的引用 您可以编写var b=function(){return a.apply(this,arguments);},但是b

新手的困境:

var a = function() {console.log(5);}

var b = a;

a = function() {console.log(6);}
显然
b==function(){console.log(5);}

问题是,我如何通过保留对原始函数的引用来包装/修改
a
,以便b也指向修改后的函数

这是不可能的。

Javascript不支持对变量的引用


您可以编写
var b=function(){return a.apply(this,arguments);}
,但是
b
仍然是一个不同的对象。

有点开玩笑,但如果我没弄错的话,它应该可以实现您的目标:

var b = function() { a(); }
这一行:

var a = function() {console.log(5);}
…在内存中创建一个对象--一个函数--并将对它的引用存储在
a

同样,这一行:

b = a;
…将
a
中的引用存储在
b

那么,你应该能够预测这条线的作用:

a = function() {console.log(6);}

它在
a
中存储对某个新函数的引用。这根本不影响
b
。换句话说,
b
不是
a
的别名。很偶然,它曾经指向与
a
相同的内存位置。它们是独立的变量,能够指向内存中的任意对象。当然,它们可以指向同一个对象,但它们之间的关联性是前所未有的。

一旦给变量赋值,引用就会丢失。但是,您可以在函数周围使用对象包装器:

var a = { func: function() { console.log(5); } };
var b = a;
b.func(); // will print 5 to the console

a.func = function() { console.log(6); };
b.func(); // will print 6 to the console

Javascript不能直接控制指针,但您可以通过从不重新分配
a
b
来解决这一问题。而是将它们都设置为指向同一对象,然后更改对象的属性,如下所示

var a = {fn:function() {console.log(5);}};
var b = a;
a.fn = function() {console.log(6);};
b.fn(); // logs 6

“Javascript不支持引用。”eh?@MGZero:Javascript不支持C++的
var&b=a真的吗?试试这个<代码>变量a={x:1};var b=a;a、 x=2;警报(b.x)@skier88:那不是一个变量。它是包含在另一个变量中的变量。我意识到它与C的
&
没有直接的相似之处,但它可以达到相同的效果。我提出了一个“解决方案”,但我怀疑您的设计中存在更大的问题。您可能需要提供一些上下文,以便有人可以指出如何执行此操作。很多时候,我发现自己在学习一门新语言时陷入了困境,结果发现我在用一种不同于语言预期的方式做事;即使一个人完成了,这通常也是浪费时间,无助于提高语言水平。尼古拉斯是对的。你想干什么?那不是真的。所有变量都是指针(或者更确切地说是引用)。但是,您不能获取变量的地址或创建对变量的引用。对不起,我的措辞(或想法…)有点模糊。希望现在更清楚了。