为什么jQuery中的回调必须是自治的?

Kar*_*kus 0 javascript jquery jquery-callback

这与预期的一样,但我不喜欢它.

$('#login-form').on('submit', function(event){
  event.preventDefault();
  init.login();
});

var init = {
  login: function() {
  // do login stuff
  }
};
Run Code Online (Sandbox Code Playgroud)

这是我想要的,但它不起作用.

$('#login-form').on('submit', init.login(event));

var init = {
  login: function(event) {
  event.preventDefault();
  // do login stuff
  }
};
Run Code Online (Sandbox Code Playgroud)

为什么?

Mat*_*igh 8

它会工作,你正在调用函数(作为回调给出的值将是函数的结果)而不是将其作为值传递

$('#login-form').on('submit', init.login);
Run Code Online (Sandbox Code Playgroud)


dec*_*eze 5

init.login(event) 调用该函数init.login,将(不存在的)变量event传递给它.如果要将函数本身作为回调传递,请不要调用它:

$('#login-form').on('submit', init.login);
Run Code Online (Sandbox Code Playgroud)

在传递它之前,你必须声明该函数,此时init.loginundefined.