回调引用作为 Javascript 中的参数

Callback references as arguments in Javascript

var clientData = {
    id: 1969,
    fullName: "Not Set",
    setUserName: function (firstName, lastName)  {
      clientData.fullName = firstName + " " + lastName;
      console.log(clientData.fullName);
    }
};

function getUserInput(firstName, lastName, callback)  {  
  //why can't I say clientData.callback (firstName, lastName); instead
  callback (firstName, lastName);
}

getUserInput ("Peter", "Pan", clientData.setUserName);

正如代码中所评论的那样,如果回调参数引用的是 应该可以从 clientData 访问的函数,我为什么不能说 clientData.callback (firstName, lastName);点访问?如果 clientData.setUserName 只是对函数对象的引用,我应该不会不小心用我的注释代码说 clientData.clientData.setUsername 吧?

我是初学者,因为它不起作用,所以我确定我想错了。

clientData.callback字面上 尝试在 clientData 上访问 属性 callback。想想 clientData.callback 等同于 clientData['callback']

. 之后的内容不被视为变量。即使是,callback 的值也是一个 函数 。您不能将函数用作 属性 name。 属性 名称是 字符串 .

创建函数时,将参数视为函数中使用的变量。当你这样做时:

function getUserInput(firstName, lastName, callback)

你可以这样称呼它:

getUserInput ("Peter", "Pan", clientData.setUserName);

函数顶部隐式发生的是:

var firstName = "Peter";
var lastName = "Pan";
var callback = clientData.setUserName

无论您作为 callback 传入的内容在函数内部都被引用为 callback。所以如果你传入clientData.setUserName,它属于一个叫做clientData的对象并不重要——它在里面仍然被称为callback

尝试使用:

function getUserInput(firstName, lastName)  {  
  clientData.setUserName (firstName, lastName);
}