window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
私はスコープをテストするために簡単なスクリプトを書いていますが、私はchrome dev toolsとjsfiddleで別の結果を得ました。なぜ同じコードがjsfiddleで別の結果を返すのですか
- chrome: 'object proto';
- jsfiddle: 'global';
なぜですか?
window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
私はスコープをテストするために簡単なスクリプトを書いていますが、私はchrome dev toolsとjsfiddleで別の結果を得ました。なぜ同じコードがjsfiddleで別の結果を返すのですか
なぜですか?
新しいHTMLドキュメントにコードを貼り、Chromeで表示すると、ページが読み込まれたときにコンソールにglobal
が印刷されます。
あなたは直接デベロッパーツールのコンソールにコードを貼り付けると、あなたが得る:
object proto
undefined
そして、何デベロッパーツールを実際に評価することは(私の場合)次のスクリプトであるため、それは次のようになります。
with ((console && console._commandLineAPI) || {}) {
window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
}
したがって、with
ステートメントを使用すると、console
が現在のスコープチェーンに追加されます。は、scope
変数に変更します。 scope
にアクセスする前にオブジェクトのプロトタイプを拡張しているので、scope
(実際にはを参照しています(with
ステートメントのおかげで)を参照したときの操作結果が表示されます。出力の2行が」なぜ
理由は明白です:最初に、console.log
が実行されますので、メッセージがコンソール上に印刷され、その後、デベロッパーツールはあなたに何もではない表現console.log
の結果を(与え関数は戻り値を持たない)。
これはあなたに少し物事を明確にすることを望みます。
興味深い。しかし、実際にあなたがしようとしていることは何ですか?私はあなたが、 'Object.prototype'を列挙可能なプロパティで拡張するよりも、思考実験のようなものであることを知っていると仮定します。 –
いずれの場合でも、実際の環境で得られる結果(http:// jsbin .com/aniqurUh/1)(たとえば、開発ツールとは対照的に、あなたがリンクしていないようなフィドルのような)正しい結果です。私は、開発ツールで時折奇妙なことがあるのを発見することに全く驚いていません。 –