Chromeでこのフィドルを見て、jsコンソールを開いた状態でトリガーテキストをクリックすると、次のように表示されます。
これらすべてのwith
ブロックの理由とその価値は何ですか?
Chromeでこのフィドルを見て、jsコンソールを開いた状態でトリガーテキストをクリックすると、次のように表示されます。
これらすべてのwith
ブロックの理由とその価値は何ですか?
HTMLの「onclick」属性として指定されたときに、ブラウザーがイベントハンドラーの関数を作成する方法のように見えます。私はそれが何をするかだと思います:
<a>
と、その関数のコードで使用できるシンボルのように見えます。つまりthis[0]
、<a>
要素自体でthis[1]
あり、空の Object インスタンスのように見えthis[2]
、ドキュメント オブジェクトです。これが意味することは、「onfoo」イベント ハンドラー属性の一部として記述したコード (ストレートな JavaScript コードからバインドされた通常のイベント ハンドラーのコードではない) では、ターゲット要素 (の要素) のプロパティを参照できるということです。属性を設定している)とドキュメント要素のプロパティを、スコープチェーンに存在するかのように。
コードを少し変更すると、次のようになります。
$('<a href=# onclick="console.log(baseURI);"> ...
次に、要素の「baseURI」プロパティの値を取得します<a>
。<a>
要素の DOM ノードを明示的に参照するものを "baseURI" の前に付ける必要はありません。var
囲んでいるスコープで宣言されているかのように、「そこに」あるだけです。
(現在 w3c の仕様を確認中 ...)編集— イベント ハンドラーのスクリプト コードで使用できるシンボルを規定するものは見つかりませんでした。これは本当に奇妙です。
もう一度編集with
— 明示的なステートメントはどこにも見当たりませんが、Firefox は同じことをしているようです。
with
その引数をスコープ スタックの上に移動します。したがって、グローバルオブジェクト、関数パラメーターなどよりもさらに高くなります。なぜそれを使用するのかわかりません。おそらくそれは生成されたコードです。