2016-11-04 17 views
1

このコードでは何が定義されていませんか?定義されていないものは、javascript関数のプロトタイプを参照してください

theFunction.apply(["ali", "Developer"]); 

:未定義の指定がなければ、「私の名前は未定義であると私は未定義だ」

(function(){ 
 
    'use strict'; 
 

 
    function theFunction(name, profession) { 
 
     console.log("My name is " + name + " and I am a " + profession + " . "); 
 
    } 
 
    theFunction("John", "fireman"); 
 
    theFunction.apply(undefined,["ali", "Developer"]); 
 
    theFunction.call(undefined, "sara", "doctor"); 
 
}());

+0

を参照してください:http://stackoverflow.com/questions/5247060/in-javascript-is-there-equivalent-to-apply-that-doesnt-change-the-value-あなたは 'this'の値を変更しないのでです。 – scrappedcola

+1

_ "未定義を指定しないと、"私の名前は未定義で、私は未定義です "" _ – guest271314

+0

OPは、applyやcallの使用時に最初のパラメータとして 'undefined'を追加しないと意味します。正解は以下の通りです。 –

答えて

6

私の答えはWithout specifying undefinedによってあなたがそのようなコールを意味することを前提として言いますcallまたはapplyを使用する場合、最初のパラメータは実行コンテキスト(変数thisの内部はtheFunction)です。この2つの例ではundefinedに設定されているため、thisの内部にはtheFunctionがあり、undefinedと評価されます。たとえば、次のように

function theFunction(name, profession) { 
     console.log(this); // logs `undefined` 
     console.log("My name is " + name + " and I am a " + profession + " . "); 
} 

theFunction.apply(undefined, ["ali", "Developer"]); 

Here is 1は、実行コンテキストとしてundefined使用する理由を説明するスレッド。

今、あなたの質問に。あなたの呼び出しでundefinedを省略した場合は、そのようなものです:

実行コンテキスト
theFunction.apply(["ali", "Developer"]); 

- thisは - あなただけapplyに一つのパラメータを渡すので、undefinedとして評価され["ali", "Developer"]、およびnameprofessionに設定されている、それはなぜです"My name is undefined and I am a undefined"

callおよびapplyは、通常、関数の実行コンテキストを変更する場合に使用します。おそらくapplyを使用して、引数の配列を別々の引数に変換します。呼び出しのいずれかが試さとしてtheFunction()が含まれていないものの、theFunction()を再生について説明結果

theFunction("John", "fireman"); // `this` points to `window` 
theFunction.apply(this, ["John", "fireman"]); // `this` points to `window` 
+2

'this'は決してどこにも使われず、コードはOPが何を言っているのかを出力しません。 – GSerg

+0

私は、いくつかのコードはもっと説明すると言っていたが、あなたは私にそれを打つ:) –

+0

OPは 'theFunction.apply([" ali "、" Developer "])' Questionで 'javascript'を使わない。 OPは 'theFunction()'を試したかもしれませんが、 – guest271314

1

:これを行うには、あなたが適用されずに関数を呼び出した場合であったであろうものと同じ実行コンテキストを設定する必要があります質問

未定義指定せずに

でそれは「私の名前は未定義であると私は未定義 だ」を呼び出すために、ある

語ります210を渡すことなく、 theFunctionを呼び出すと、nameprofessionは、関数本体内でundefinedになると予想されます。

(function() { 
 
    'use strict'; 
 

 
    function theFunction(name, profession) { 
 
    console.log("My name is " + name + " and I am a " + profession + " . "); 
 
    } 
 
    theFunction(); // logs result described at Question 
 
    theFunction("John", "fireman"); 
 
    theFunction.apply(undefined, ["ali", "Developer"]); 
 
    theFunction.call(undefined, "sara", "doctor"); 
 

 
}());

+0

この 'theFunction.apply([" ali "、" Developer "]);'は、OPが取得する結果を生成します。「My name is undefined、undefinedです。 ' –

+0

@ Maximus編集済み回答; 'theFunction()'と 'theFunction.apply([" ali "、" Developer "])'はOPが実際に試みたものとして含まれていません。質問に記載された質問の回答結果に記載されているコールはありません。 – guest271314

+0

あなたは正しいです。あなたの前提は可能な限り私のものと同じです。とにかく、私はそれが他の可能な選択肢を示しているのであなたの答えをupvoted。 –

関連する問題