2017-06-27 6 views
2

スーパーシンプルな機能:スーパー簡単なJavaScript関数の呼び出し

function equals(a,b){return a==b;} 

私はこのようにそれを呼び出すと、それが正常に動作し、trueを返します:それはfalseを返すものの

equals(1,1) 

私はこのようにそれを呼び出します、理由を理解できません:

equals.call(1,1) 

私はfunction.callを呼び出すことは単に関数を呼び出すことと同じだと考えました。私はここで何が欠けていますか?

+1

コンテキストの最初の引数は – Shivam

+2

です。コンテキストを渡していないため、グローバルスコープで実行した場合、 'equals.call(this、1,1)' –

+1

のように呼び出します。 javascriptの 'this'はコンテキストと呼ばれます。 'call'の最初の引数は、' this'が何であるのかを定義し、次に関数の引数を定義することです。 – AtheistP3ace

答えて

4

第一引数.callことを期待は、あなたが関数に渡したい引数が続くその関数呼び出し内のthisの値です。

あなたの関数がthisへの参照が含まれていないので、あなたが最初の引数としてnullを渡すことで、あなたが望む結果を得ることができます。

equals.call(null, 1,1); 

あなたはMDNドキュメントFunction.prototype.call

で、この方法についての詳細を見つけることができます
1

それがhere述べられているように:

コール()メソッドは、指定されたこの値と個別に設け 引数を持つ関数を呼び出します。

function.call(thisArg, arg1, arg2, ...) 

あなたがそこに1本の値を渡すのでは明らかに正しくないthis、として使用されます。

最初のパラメータはthisの値です。最初にnullと2つの数字を渡す必要があります。

equals.call(null, 1, 1) 
2

Function.prototype.callの最初の引数は、関数がthis扱いとさせていただきます値のためです。関数がthisを使用していないので、あなたはちょうどそのようなnullとして、あなたが好きなものに渡すことができます。

equals.call(null, 1, 1) 
1

.callを使用したときの最初の引数は「この」のリファレンスです。

は、例えば、このjsFiddleを参照してください:コールのためのhttps://jsfiddle.net/4hfrc3sk/

+1

試用のポイント! – Isaac

1

.callの最初の引数はcontext(= "this"も参照します)です。

だから、あなたが行うことができます:

equals.call(undefined, 1, 1); 

しかし、それはかなり無意味です。

は.callについて

もっと読み:あなたが最初のパラメータとしてnullまたはundefined指定せずに実行するために呼び出す場合、次のようにhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

0

は、あなたがコードを書き換えることができます:

function equals(a,b) { 
 
    var w = window; 
 
    return (w.a == w.b); 
 
} 
 

 
d = document; 
 
d.g = d.getElementById; 
 

 
var a = 1; 
 
var b = 1; 
 
var res = equals.call(a,b); 
 

 
d.g("answer").innerHTML= "\n<BR>" + a + " == " + b + "? " + res + "\n"; 
 

 
a = 5; 
 
b = 9; 
 
res = equals.call(a,b); 
 

 
d.g("answer").innerHTML += "\n<BR>" + a + " == " + b + "? " + res;
#answer { 
 
font: 22pt Arial,Helvetica; 
 
color: #090; 
 
}
<div id="answer"></div>

resource

ただし、単に関数呼び出しでnullまたはundefinedのコンテキストを提供したい場合は、その引数を関数定義に残すか、間違った結果が生じる可能性があります。 goodbadを参照してください。

関連する問題