function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
add5(2); //7;
add5(2).__proto__; //0`
意味があります。しかし、add5(2)はオブジェクトですか?なぜ0がありますか?javascript closure __proto__
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
add5(2); //7;
add5(2).__proto__; //0`
意味があります。しかし、add5(2)はオブジェクトですか?なぜ0がありますか?javascript closure __proto__
私はあなたのコードを実行している環境かわからないが、これはあなたが数値に__proto__
にアクセスしようとすると何が起こるかです:値が一時的に数オブジェクト(すなわち同等に変換され、 new Number(7)
と呼ぶ)。そのオブジェクトのプロトタイプはもちろんNumber.prototype
です。
番号プロトタイプはNumberオブジェクト自体です。値が+0の内部スロット[[NumberData]]があります。
私は唯一の環境はあなたがadd5(2).__proto__
は、数のオブジェクトであり、その後、0
を返すそのvalueOf
メソッドを呼び出したことを検出を使用していると仮定することができます
console.log(Number.prototype.valueOf());
ありがとう。関数のパラメータはコンパイル時にjavascriptに表示されますか?私は範囲内でパラメータが変数として作成されることを意味します。 – xin
あなたは何を意味するのかそこまで?私のchrome開発ツールによると、 '__proto__'はオブジェクトではなく0である。 – lilezek
JSの中のすべて(' undefined'と 'null'を除く)はオブジェクトです。 – jmargolisvt
about:blankを指し示す新しいChromeタブを開き、新しい/クリアコンソールを試してみてください。 add5(2).__ proto__は非ゼロのNumberオブジェクトです。 – ranieribt