.bind(this) 是按引用传递还是按值传递?
Posted
技术标签:
【中文标题】.bind(this) 是按引用传递还是按值传递?【英文标题】:Does .bind(this) pass by reference or by value? 【发布时间】:2018-09-24 21:03:25 【问题描述】:我在某处创建了一个函数并将其绑定到this
,这样我就可以在函数中使用父块的this
作为this
的值。例如:
var foo = function()
// some stuff involving other stuff
.bind(this);
我作为参数传递给bind
的this
是通过引用传递还是通过值传递?因此,如果我稍后在外部代码块中更改this
对象的参数,然后调用foo
,foo
将在我调用bind
时使用this
的值,或者当时我打电话给foo
?
【问题讨论】:
从技术上讲,有no pass-by-reference in javascript。不过,this
是对您的对象的引用,因此您将对象的引用传递给函数,因此如果您在函数内部更改 this
,那么原始对象也会发生变异。跨度>
JavaScript 中的一切都是按值传递的,句号。按值传递引用与按引用传递不同。
你好@ibrahimmahrir。大多数高级编程语言将按引用传递作为按值传递指针。很明显这不是我要问的,因此它不是很有帮助。抱歉,我真的不明白你想在这里贡献什么。
这不是真的。它根本不实现传递引用。在这种情况下,无论this
是通过引用还是值传递,它所指向的对象的属性都是相同的,因为只有一个对象。如果你真的没有问你问什么,那么你应该把问题改成你问什么。
@fgb 你没有抓住重点——这个问题与 JavaScript 的“传递引用”是如何在幕后实际实现无关的。
【参考方案1】:
如果您要更改 this
对象的值,那么 foo 将在调用 foo
时获得 this
的新值。
var module =
x: 42,
getX: function ()
return this.x;
var retrieveX = module.getX;
console.log(retrieveX()); // The function gets invoked at the global scope
// expected output: undefined
var boundGetX = retrieveX.bind(module);
module.x = 52;
console.log(boundGetX());
【讨论】:
【参考方案2】:因此,如果我稍后更改 this 对象的参数 外部代码块,然后调用 foo,将 foo 使用该值 是在我调用 bind 的时候,还是在我调用 foo 的时候?
在你打电话给 foo 的时候。
this
是对象的引用。这意味着 Object 可能会在某个时候发生变异,您将获得它的“最新”值。
【讨论】:
我想说this
的值在绑定和调用foo
时都是相同的。它仍然是同一个对象;但是,它的属性可能会改变。以上是关于.bind(this) 是按引用传递还是按值传递?的主要内容,如果未能解决你的问题,请参考以下文章