0

不确定这是否是一个愚蠢的问题。我已经开始使用一些 JavaScript 框架,当我看到一个没有在函数内部使用的参数时,我总是感到困惑。

一个主干示例(模型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下一个参数):

app.use(function(err, req, res, next){
  console.error(err.stack);
  res.send(500, 'Something broke!');
});

所以,我想知道,这些值会被忽略吗?如果你把它们排除在外会发生什么?为什么必须首先将它们包括在内?(我习惯这样的想法,如果一个函数传递一个参数是因为它将在函数中使用)。

4

4 回答 4

2

初始化的情况下:

未使用变量模型,但错误是。因为错误是第二个参数,模型必须作为占位符传递。

在使用中也是如此:

变量req没有​​被使用,但它作为占位符是必需的,因此可以使用res 。


为什么函数的参数似乎没有被使用?

也许是为了向后兼容或可扩展性。

我假设这些都是开源库(我从来没有使用过)。

于 2012-12-13T02:27:06.060 回答
1

如果忽略这些值,则不会发生任何事情,并且效果也很好。不管这些值是否被忽略,无论你是否使用它们,它们实际上都是传入的。

于 2012-12-13T02:29:13.287 回答
1

您不必这样做,除非您使用的是在您不使用的参数之后的参数。即使这样,您也可以在函数中使用参数对象来获取正确索引处的参数。

function myFunc(){
 console.log(arguments);
}

myFunc(1,2,3,4,5,6); // logs 1,2,3,4,5,6

但是,在文档中,最好让开发人员知道回调中注入了哪些参数,以便开发人员可以清楚地了解延续配置。

于 2012-12-13T02:31:49.247 回答
1

你是对的,如果你不使用它们,这些参数将被忽略。此外,它们可以安全地排除在外。但是,如果您只想访问第二个参数,则需要将第一个参数作为占位符。

至于为什么会有这些论点?重要的是要了解您传入的是回调函数。然后,您传递给它的函数稍后会调用此回调。因此,调用回调函数并传入这些参数的是框架提供的函数。框架无法知道您的特定用例是什么,并且知道您的回调需要哪些数据的确切方法。因此,框架的作者传递了几个带有足够数据的参数,以覆盖尽可能多的用例。虽然您的回调函数没有使用这些参数,但使用这些框架的其他开发人员可能正在编写一个使用这些参数的回调。

于 2012-12-13T03:21:41.697 回答