0

これがばかげた質問かどうかはわかりません。私はいくつかの JavaScript フレームワークを使い始めましたが、関数内で使用されていない引数を見るといつも混乱します。

バックボーンの例 (モデル引数):

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);
    });
  },
});

具体的な例 ( reqおよびnext引数):

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

それで、私は疑問に思っています、それらの値は単に無視されますか? それらを除外するとどうなりますか?そして、なぜそれらを最初に含めなければならないのでしょうか? (関数が引数を渡すのは、関数で使用されるためであるという考えに慣れています)。

4

4 に答える 4

2

初期化の場合:

変数モデルは使用されませんが、エラーは使用されます。error は 2 番目の引数であるため、モデルをプレースホルダーとして渡す必要があります。

同じことが使用にも当てはまります。

変数reqは使用されませんが、 resを使用できるようにプレースホルダーとして必要です。


関数に使用されていないように見えるパラメーターがあるのはなぜですか?

下位互換性のためか、拡張性のためかもしれません。

これらは両方ともオープン ソース ライブラリであると思います (どちらも使用したことがありません)。

于 2012-12-13T02:27:06.060 に答える
1

これらの引数を使用しない場合、これらの引数は無視されるというのは正しいことです。また、それらは安全に除外することができます。ただし、2番目の引数にのみアクセスする場合は、最初の引数をプレースホルダーとして持つ必要があります。

なぜこれらの議論があるのですか?渡すのはコールバック関数であることを理解することが重要です。このコールバックは、後で渡した関数によって呼び出されます。したがって、コールバック関数を呼び出してこれらの引数を渡すのは、フレームワークによって提供される関数です。フレームワークには、特定のユースケースが何であるかを知る方法がなく、コールバックに必要なデータを正確に知る方法があります。したがって、フレームワークの作成者は、可能な限り多くのユースケースをカバーするのに十分なデータを含むいくつかの引数を渡します。コールバック関数がこれらの引数を使用していない間、これらのフレームワークを使用している他の開発者は、使用するコールバックを作成している可能性があります。

于 2012-12-13T03:21:41.697 に答える
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 に答える