使用`.bind(thisArg,[,arg1 [,arg2 [,...]]])`来添加参数

时间:2015-04-21 17:03:13

标签: javascript parameters scope bind ecmascript-5

我正在学习真正喜欢ES5的.bind(),因为它允许我修改回调函数的上下文,并且真正解决了大多数回调地狱或金字塔问题。

但是,我想知道它是否通常被认为是利用可选args参数的最佳实践。能够注入依赖项似乎非常有用,但使用不当可能导致很难解开意大利面条代码。

示例:

function loadFile(filename, callback) {
  fs.exists(function (exists) {
    if (exists) {
      fs.readFile(filename, 'utf8', function (err, data) {
        callback(data);
      });
    }
  });
}

// becomes

function onReadFile(callback, err, data) {
  callback(data);
}

function onExists(filename, callback, exists) {
  if (exists) {
    fs.readFile(filename, 'utf8', onReadFile.bind(this, callback));
  }
}

function loadFile(filename, callback) {
  fs.exists(onExists.bind(this, filename, callback));
}

我应该坚持使用嵌套函数还是使用可选的arg参数?

1 个答案:

答案 0 :(得分:2)

是的,部分申请是一种非常有益的做法。使用它没有任何问题。相反,回调地狱 被称为反模式。