不确定这是否是一个愚蠢的问题。我开始玩一些JavaScript框架,当我看到一个没有在函数内部使用的参数时,我总是感到困惑。
Backbone示例(模型 arg):
var Todo = Backbone.Model.extend({
validate: function(attribs){
if(attribs.title === undefined){
return "Title can't be undefined";
}
},
initialize: function(){
console.log('This model has been initialized');
this.on('error', function(model, error){
console.log(error);
});
},
});
Express示例( req 和下一个 args):
app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});
所以,我想知道,那些价值观被忽略了吗?如果你把他们留下会怎么样?为什么他们必须首先被包括在内? (我习惯了如果函数传递参数是因为它将在函数中使用)。
答案 0 :(得分:2)
在初始化的情况下:
未使用变量 model ,但错误是。因为error是第二个参数,所以模型必须作为占位符传递。
在使用中也是如此:
未使用变量 req ,但它需要作为占位符,因此可以使用 res 。
为什么这些函数的参数似乎没有被使用?
可能是为了向后兼容性或可扩展性。
我认为这些都是开源库(我从未使用过)。
答案 1 :(得分:1)
如果忽略这些值,则不会发生任何事情,它也会起作用。 无论这些值是否被忽略,无论您是否使用它们,它们都会被实际传递。
答案 2 :(得分:1)
你不必,除非你使用的参数是在你不使用的参数之后。 即便如此,您也可以在函数中使用参数对象来获取正确索引的参数。
function myFunc(){
console.log(arguments);
}
myFunc(1,2,3,4,5,6); // logs 1,2,3,4,5,6
在文档中,最好让开发人员知道回调中注入了哪些参数,以便开发人员可以清楚地看到延续配置。
答案 3 :(得分:1)
如果您不使用这些参数,那么这些参数将被忽略。此外,他们可以安全地被排除在外。但是,如果您只想访问第二个参数,则需要将第一个参数作为占位符。
为什么这些论点存在?重要的是要了解您传入的是回调函数。然后,在您将其传递给的函数中稍后调用此回调。所以它是框架提供的函数,它调用你的回调函数并传入这些参数。框架无法知道您的具体用例是什么,并且知道如何准确了解回调所需的数据。因此,框架的作者传递了几个参数,其中包含足够的数据以涵盖尽可能多的用例。虽然你的回调函数没有使用这些参数,但使用这些框架的其他开发人员可能正在编写一个回调函数。