Javascript寄存器回调

Javascript register callback

本文关键字:回调 寄存器 Javascript      更新时间:2023-09-26

我有一项服务,想做以下

var service = new Service();
service.onEvent(cb);
var my_module = {
  logged_in(){},
  logged_out(){}
}
function cb(data){
  if (data){
    my_module.logged_in(data);
  } else {
    my_module.logged_out();
  }
}
module.exports = my_module;

然后在其他地方使用此模块:

import my_module from 'somefile';
my_module.logged_in = function(data){
  _this.setState({user: data});
}
my_module.logged_out = function(data){
  _this.setState({user: null});
}

然而,这不起作用。函数cb抱怨没有定义my_module。

JS吊装确实在这里抓住了你。变量声明和函数语句被"提升"到当前作用域的最开始。这意味着,当提前触发服务事件时,可能不定义变量my_module

参见:

  • http://www.sitepoint.com/demystifying-javascript-variable-scope-hoisting/
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting