You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中.bind(this)是按引用还是按值传递?

关于bind方法中this传递与绑定的细节解答

嘿,这个问题问到点子上了,刚好是JavaScript里bind方法和this绑定的核心知识点,我给你一步步讲明白:

1. 传递给bind的this是按引用还是按值传递?

在JavaScript里,对象类型的参数都是按引用传递的,所以当你把this(如果它是一个对象)传给bind时,传递的是这个对象的引用,而不是对象的副本。也就是说,bind会保存这个引用,而不是复制整个对象。

2. 外部修改this对象属性后,调用foo时用哪个this值?

这里要分两个层面看:

  • this的指向:bind的核心作用就是永久绑定函数的this指向,一旦用bind绑定了某个this引用,不管之后你用什么方式调用foo(哪怕用call/apply试图改变this),foo内部的this永远都是调用bind时传入的那个对象。
  • 对象属性的访问:因为传递的是对象引用,如果你在外部修改了这个对象的属性,那么调用foo时,函数内部访问到的是这个对象的最新属性值——毕竟你操作的是同一个对象。

举个直观的例子

// 模拟父作用域的this对象
const myContext = {
  value: "初始值"
};

// 在父作用域中绑定this到foo
const foo = function() {
  console.log(`当前this的value属性:${this.value}`);
}.bind(myContext);

// 外部修改myContext的属性
myContext.value = "修改后的值";

// 调用foo
foo(); // 输出:当前this的value属性:修改后的值

// 哪怕用call试图改变this,也没用
foo.call({ value: "试图覆盖的值" }); // 还是输出:当前this的value属性:修改后的值

这个例子里,bind保存了myContext的引用,所以修改myContext的属性后,foo能拿到最新值;但foo的this指向永远是myContext,无法被后续的调用方式改变。

总结一下

  • 传递给bind的对象类型this是按引用传递的;
  • 调用foo时,内部的this指向是调用bind时的那个对象引用,不会变成调用foo时的this;但对象的属性变化会同步反映到函数内部,因为引用的是同一个对象。

内容的提问来源于stack exchange,提问作者hitecherik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:48:15