那么基本上为什么我必须在这种情况下特别使用这种方法?
function Example(callback) {
// What's the purpose of both 'call()' and 'null'?
callback.call(null, "Hello")
}
Exemple(function(callback) {
alert();
})
我已经在一个开放的项目代码中弄清楚了这种语法,但是我还没有弄清楚它为什么起作用。
答案 0 :(得分:1)
在这种情况下,您无需使用call()
。需要在函数中设置call()
的值时使用this
。如果您不这样做,则只需像调用其他任何函数一样调用该函数即可。例如:
function Example(callback) {
// call the function passed in
callback("Hello")
// this also works, but there's no benefit here
// because the callback doesn't care about `this`
// callback.call(null, "Hello")
}
// pass a callback function to Example
Example(function(text) {
console.log(text);
})
如果回调函数需要call
的值,则可以使用this
。例如:
function Example(callback) {
let person = {name: "Mark"}
// set this in the callback to the person object
// and the execute it with the argument "Howdy"
callback.call(person, "Howdy")
}
Example(function(greeting) {
// the callback function depends on having this.name defined
console.log(greeting, this.name);
})
答案 1 :(得分:1)
乍一看似乎毫无意义,但是,使用这种语法可能有正当的理由,例如:
回调显式依赖于this
为null
而不是某些全局默认值
回调不一定是一个函数,它可以是一个提供.call
方法的“类似函数”对象
callback.call(...
在应用程序中始终使用,无论是否需要this