【发布时间】:2016-09-26 08:13:04
【问题描述】:
这个问题比较了 3 种方法的返回,而不是比较如何通过普通的 IIFE 函数返回轻松完成。
这个简单的示例显示了使用范围绑定方法(即调用、应用和绑定)获得的结果的比较。
片段:
function printName() {
return this.name;
}
var obj1 = { name: 'Peter' };
var obj2 = { name: 'John'};
var obj3 = { name: 'Richard' };
var result1 = printName.call(obj1);
var result2 = printName.apply(obj2);
var result3 = printName.bind(obj3);
console.log(result1);
console.log(result2);
console.log(result3);
结果:
查询:
- 在程序中进行哪些更改才能在第三种情况下获得“Richard”的结果?
- 如果 call 和 apply 与第一种和第二种情况下的操作相同,那么 apply 优于 bind 或何时使用 apply 而不是 call 的重要性是什么?
- 即使绑定返回函数,该函数不应该在控制台中显示 obj3 与此函数的某些绑定(如 obj3 作为参数)吗?
【问题讨论】:
-
您能解释一下这与您之前的问题有何不同吗? Using call in JavaScript vs Returning by simple function 似乎已经讨论了差异。
-
本题基本比较了3种方式;前面是比较普通函数和调用方法的。
-
前两个问题都在您上一个问题的答案中得到了回答。
-
你可以通过调用它来制作
result3 == "Richard"-var result3 = printName.bind(obj3)(); -
每个帖子只问一个问题。
标签: javascript function scope this call