如何在JavaScript函数中使用“ .call()”方法,为什么它具有“空”值?

时间:2018-10-27 20:44:13

标签: javascript

那么基本上为什么我必须在这种情况下特别使用这种方法?

function Example(callback) {  
    // What's the purpose of both 'call()' and 'null'?  
    callback.call(null, "Hello") 
}  

Exemple(function(callback) {  
    alert();
})  

我已经在一个开放的项目代码中弄清楚了这种语法,但是我还没有弄清楚它为什么起作用。

2 个答案:

答案 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)

乍一看似乎毫无意义,但是,使用这种语法可能有正当的理由,例如:

  • 回调显式依赖于thisnull而不是某些全局默认值

  • 回调不一定是一个函数,它可以是一个提供.call方法的“类似函数”对象

  • callback.call(...在应用程序中始终使用,无论是否需要this