私の答えは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"]
、およびname
とprofession
に設定されている、それはなぜです"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`
を参照してください:http://stackoverflow.com/questions/5247060/in-javascript-is-there-equivalent-to-apply-that-doesnt-change-the-value-あなたは 'this'の値を変更しないのでです。 – scrappedcola
_ "未定義を指定しないと、"私の名前は未定義で、私は未定義です "" _ – guest271314
OPは、applyやcallの使用時に最初のパラメータとして 'undefined'を追加しないと意味します。正解は以下の通りです。 –