3

私は最近、javascript をもう少しよく理解しようとして、いくつかのコードをテストしています。call()それから、よく理解できない機能に出くわしました。

次のコードがあります。

function hi(){
    console.log("hi");
}

var bye = function(param, param2){
    console.log(param);
    console.log(param2);
    console.log("bye");
}

を呼び出すとbye.call(hi(), 1, 2)hi 1 2 undefined

そして、私が呼び出すとbye.cal(1,2)、私は得る2 undefined bye undefined

関数の最初のパラメーターは関数でなければならず、その後に関数が受け入れるcall()パラメーターの量が続くことを理解しています。byeしかし、最後の undefined はどこから来るのでしょうか?

4

4 に答える 4

4

この最初のパラメーターは、関数である必要はありません。最初のパラメーターは、関数呼び出しのコンテキストで「this」変数が設定されるオブジェクトです。

var bye = function(param, param2){
    console.log(param);
    console.log(param2);
    console.log("bye");
    console.log(this.x)
}

t = {'x': 1};

bye.call(t, 1, 2);

コンソールには、1、2、「bye」、および 1 が表示されます。

undefined は関数の戻り値です。

最初の呼び出しで:

bye.call(hi(), 1, 2)

hi() を呼び出しているため ('hi' と表示されます)、戻り値は使用されず、1 と 2 は bye のパラメーターです。

2 番目の呼び出しで:

bye.cal(1,2)

これに 1 が割り当てられます。2 は param で、param2 は未定義です。

于 2013-06-10T05:08:11.343 に答える
2

関数は何も返さず、出力を画面に出力するだけなので、 undefined を取得しています。したがって、コードは次のようになります。

var obj = {foo: "hi"};
var bye = function(param, param2){
    console.log(this.foo);
    console.log(param);
    console.log(param2);
}

bye.call(obj, 1, 2)   // "hi", 1, 2

の詳細については、MDN のこちらを参照し.call()てください。

于 2013-06-10T05:06:28.043 に答える
1

fn.call()this関数が呼び出されたときの値を設定できます。のその値はthis、 の最初の引数でなければなりませんfn.call()

于 2013-06-10T05:09:44.730 に答える