Javascript通过值传递函数与通过引用传递函数

Javascript通过值传递函数与通过引用传递函数,javascript,Javascript,当我这样做的时候 function foo(){//some stuff..} var bar = foo; 我正在把foo复制到bar,对吗 有没有一种方法可以将一个函数赋给一个指向函数的变量,而不是复制它?因此,我可以将几个变量分配给同一个函数,一旦这个函数被更新,所有分配的变量也将被更新 我知道我可以通过原型继承来实现这一点,但我要问的是,是否可以通过简单的变量赋值来实现这一点?在JS中,所有非原语值都是通过引用传递的 function a(val) { a.val = val; }

当我这样做的时候

function foo(){//some stuff..}
var bar = foo;
我正在把
foo
复制到
bar
,对吗

有没有一种方法可以将一个函数赋给一个指向函数的变量,而不是复制它?因此,我可以将几个变量分配给同一个函数,一旦这个函数被更新,所有分配的变量也将被更新


我知道我可以通过原型继承来实现这一点,但我要问的是,是否可以通过简单的变量赋值来实现这一点?

在JS中,所有非原语值都是通过引用传递的

function a(val) { a.val = val; }

a(1);

a.val; //1

var b = a;

b(2);

a.val; //2

但是,如果您的意思是,当您将一个新的引用分配给一个变量时,您希望更新引用相同内存地址的所有其他变量,以便它们也引用该新内存地址,这实际上是不可能的,如果您需要此功能,您的设计存在严重缺陷。

foo没有被复制到bar,但foo和bar引用的是同一个函数对象。您的代码与此类似

var foo,bar;
foo = bar = function() {};
这里foo和bar是对同一个函数对象的引用。 证明:


“我正在将foo复制到bar,对吗?”-是的,但这是一个参考。您将如何更新该函数?运行时?@Quentin那么按引用传递和按值传递有什么区别?@IlyaD-JavaScript没有提供创建变量引用的方法。只能将引用指定给对象(函数是对象的一种类型)。变量的值将始终是一个引用。当你传递一个变量的值时,你就是在传递一个函数的引用。?
foo.a = "Modified by foo";
alert(bar.a); // echo's "Modified by foo"