我想知道这背后是否有理由,因为在我看来,如果将对象作为值传递,它将更加面向对象。实际上,这将是对象的功能范围,就像使用基元一样。
仅仅是出于优化目的,对象是通过引用传递的?
JavaScript不会通过引用传递对象。它通过参考值(如C#和Java)传递对象。JavaScript总是通过值传递-该值可能恰好是对对象的引用。
function foo(obj){
obj = {};
}
var o = {x: 5};
foo(o);
console.log(o.x); // 5, proof that JavaScript is pass-by-value
例如,在C ++中:
void foo(int& i){
i = 5;
}
int j = 10;
foo(j);
std::cout << j; // logs 5, this is what pass-by-reference is
JavaScript中的基元是值,通过引用传递它们是没有意义的,因为通过值无论如何它们都是不可变的(您不能更改数字5)。
我同意,值具有更好的语义。您不能返回错误地从未知位置修改的值。它要清晰得多,而且很容易优化。通常,不可变性在JavaScript中获得了很大的发展,并且很多人(包括我在内)都在使用不可变集合(例如ImmutableJS)。请注意,非原始值类型是已计划的,但目前处于规范范围内,不会在ES7之前出现。
这是我能找到的唯一参考,我在讨论邮件列表中没有看到它的讨论,但我希望它正在发展中:)
基本上,对我们可以高效执行此操作的了解比JavaScript更新得多。JavaScript是一种非常有趣的语言,但请记住,它是由一个人紧急完成的,设计时间为10天。诸如价值对象之类的好东西正在发展中,但是我们将不得不与现在的东西联系起来。如果让您感觉更好,许多其他语言也可以这样做(例如Scala,Java和C#)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句