【发布时间】:2016-12-20 14:22:36
【问题描述】:
我对以下代码有疑问。我认为在 JS 中分配给变量的数据类型原语是通过值传递的,而对象是通过引用传递的。如果函数是JS中的对象,我认为应该是引用传递,但是下面的两个代码表现得像值传递:
代码 1
var x = function hello(){ console.log("hello")};
console.log(x);
var y = x;
console.log(y);
x = function bye(){console.log("bye")};
console.log(x);
console.log(y);
输出
[Function: hello]
[Function: hello]
[Function: bye]
[Function: hello]
代码 2
在这种情况下,我将一个方法分配给了一个全局变量,并且行为是相同的:
var x = {name:"Max",
action: function one(){console.log("one")}
}
var y = x.action;
console.log(y);
x.action = function two(){console.log("two")};
console.log(x.action);
console.log(y);
输出
[Function: one]
[Function: two]
[Function: one]
我非常感谢对此的任何见解和解释。
【问题讨论】:
-
您正在重新分配变量。不通过引用修改它们。
-
JS 没有通过引用。始终按值传递,但该值可以是引用。
-
感谢您的回答 Niet。在代码 1 中,如何修改通过引用分配给变量 x 的函数“hello”,而不是重新分配它?
标签: javascript pass-by-reference pass-by-value