bind返回一个新函数,其this永久绑定首参且支持预设参数;它不执行原函数,需显式调用;绑定后this不可被call/apply修改;箭头函数因词法this,bind无效。

JavaScript 中 bind 方法返回的是一个**新函数**,这个新函数的 this 值被永久绑定为传入的第一个参数,同时可以预设部分参数(柯里化)。
bind 返回的是函数,不是立即执行结果
bind 不会调用原函数,只生成并返回一个绑定好上下文和部分参数的新函数。你需要显式调用它才能执行:
-
fn.bind(obj, 1, 2)→ 返回函数,不执行 -
fn.bind(obj, 1, 2)()→ 才真正执行
返回函数的 this 被固定,无法被再次修改
即使后续用 call、apply 或普通调用试图改写 this,绑定后的函数仍坚持最初指定的对象:
function greet() { return `Hello, ${this.name}`; }
const bound = greet.bind({ name: 'Alice' });
console.log(bound()); // "Hello, Alice"
console.log(bound.call({ name: 'Bob' })); // 还是 "Hello, Alice"
支持预设参数(柯里化),后续调用可追加参数
bind 第二个及之后的参数会作为“前置参数”固化,调用时传入的参数会拼在后面:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
add.bind(null, 10)→ 创建一个“加 10”的函数 -
add.bind(null, 10)(5)等价于add(10, 5)
例如:
function add(a, b) { return a + b; }
const add10 = add.bind(null, 10);
console.log(add10(3)); // 13
注意:箭头函数没有自己的 this,bind 对它无效
箭头函数的 this 是词法绑定的,bind 无法改变它,调用后仍指向定义时的外层 this:
const arrow = () => this.name;
const boundArrow = arrow.bind({ name: 'No effect' });
console.log(boundArrow()); // 取决于外层作用域,不是 { name: 'No effect' }

















