javascript中bind、call、apply有什么区别?
| 方法 | 执行时机 | 参数传递方式 | 返回值 |
使用建议 | demo |
|---|---|---|---|---|---|
|
|
立即执行函数 |
接收参数列表,第一个参数是 语法: |
函数执行后的返回值 |
需要立即执行 + 参数明确 → 用 |
const person = { name: '张三' }; function greet(age, city) { console.log(`我叫${this.name},今年${age}岁,住在${city}`); } // call 会立即执行,参数一个个列出来 greet.call(person, 25, '北京'); // 输出:我叫张三,今年25岁,住在北京 |
|
|
立即执行函数 |
接收参数数组,第一个参数是 语法: |
函数执行后的返回值 |
需要立即执行 + 参数在数组中 → 用 |
const person = { name: '李四' }; function greet(age, city) { console.log(`我叫${this.name},今年${age}岁,住在${city}`); } // apply 会立即执行,参数以数组形式传入 greet.apply(person, [30, '上海']); // 输出:我叫李四,今年30岁,住在上海 |
|
|
不立即执行 |
传参方式和 |
绑定了 |
需要延迟执行、绑定上下文(如事件回调)或预设参数 → 用 |
const person = { name: '王五' }; function greet(age, city) { console.log(`我叫${this.name},今年${age}岁,住在${city}`); } // bind 不会立即执行,而是返回一个新函数 const boundGreet = greet.bind(person, 28); // 等到需要的时候再调用,并传入剩余参数 boundGreet('广州'); // 输出:我叫王五,今年28岁,住在广州 // 也可以不预先传参,调用时再全传 const boundGreet2 = greet.bind(person); boundGreet2(35, '深圳'); // 输出:我叫王五,今年35岁,住在深圳
|

浙公网安备 33010602011771号