我正在学习真正喜欢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参数?
答案 0 :(得分:2)
是的,部分申请是一种非常有益的做法。使用它没有任何问题。相反,回调地狱 被称为反模式。