为什么在JavaScript中传递参数是必要的,即使它不会在函数内部使用?

时间:2012-12-13 02:18:41

标签: javascript

不确定这是否是一个愚蠢的问题。我开始玩一些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!');
});

所以,我想知道,那些价值观被忽略了吗?如果你把他们留下会怎么样?为什么他们必须首先被包括在内? (我习惯了如果函数传递参数是因为它将在函数中使用)。

4 个答案:

答案 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)

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

为什么这些论点存在?重要的是要了解您传入的是回调函数。然后,在您将其传递给的函数中稍后调用此回调。所以它是框架提供的函数,它调用你的回调函数并传入这些参数。框架无法知道您的具体用例是什么,并且知道如何准确了解回调所需的数据。因此,框架的作者传递了几个参数,其中包含足够的数据以涵盖尽可能多的用例。虽然你的回调函数没有使用这些参数,但使用这些框架的其他开发人员可能正在编写一个回调函数。