TL; DR:
いいえ、"use strict"
1つの要素のaは、他の要素のコードにscript
課しません。それが含まれているソーステキストにのみ適用されます。"use strict"
script
(これとは別に、script
質問の最後にあるタグを再確認してください。要素にが含まれている場合、そのscript
要素に含まれるsrc
インラインテキストはすべて「ドキュメント」と見なされ、無視されます。)
更新:
仕様では、(ES5では明確だったかもしれませんが、私にはわかりませんでしたが)はい、別々script
の要素がの目的のために別々であることがより明確になりました"use strict"
。以下の元の回答の引用は、「コード単位」ではなく「ソーステキスト」となるように少し変更されており、「スクリプトとモジュール」セクションでさらに詳しく説明されています。
元の答え:
仕様によると:
厳密モードは構文コードユニットのレベルで選択されるため、厳密モードは、そのようなコードユニット内でローカルに影響を与える制限のみを課します。厳密モードでは、複数のコードユニット間で一貫して動作する必要があるECMAScriptセマンティクスの側面を制限または変更しません。
(セクション4.2.2)
したがって、問題は次のとおりです。異なるscript
タグは異なる構文コード単位ですか?
V8(Chrome内のJavaScriptエンジン)は、それらが分離していると信じているように見えるため、ページの上部にグローバルスコープで単一を配置"use strict";
することは機能しません。まだ見つけていない場所で指定されているかもしれませんが、いずれにせよ、それは合理的な解釈です。
その宣言が表示されていないと仮定すると、このコードは通常モードの暗黙のグローバルの恐怖のfoo
餌食になります。
function test() {
try {
foo = "bar";
display("foo = " + foo);
}
catch (e) {
display("Exception: " + e);
}
}
通常モードではfoo
、値が「bar」の新しいグローバル変数が作成され、"foo = bar"
メッセージが表示されます。foo
strictモードでは、が未定義であるため、例外がスローされます。
このスクリプトタグをページに配置すると、次のようになります。
<script>
"use strict";
function test() {
try {
foo = "bar";
display("foo = " + foo);
}
catch (e) {
display("Exception: " + e);
}
}
</script>
...期待どおりに例外が発生します(ライブ例)。ただし、それらを別々のscript
タグに入れると、次のようになります。
<script>
"use strict";
</script>
<script>
function test() {
try {
foo = "bar";
display("foo = " + foo);
}
catch (e) {
display("Exception: " + e);
}
}
</script>
例外は発生しません(V8の場合)(例)。そして、ブラウザとJavaScriptエンジンがどのように相互作用しているかを考えると、それは合理的です。
同様に、関数が別のファイルでオフになっていて、これを行う場合:
<script>
"use strict";
</script>
<script src="/inatoq"></script>
おそらく同じ理由で、例外(例)は発生しません。
ここにあるサンプルタグに注意してください。
<script data-main="lib/main" src="lib/require.js">"use strict"</script>
無効です。script
タグには、属性またはコンテンツのいずれかを含めることができますが、両方を含めることはできません。(基本的に、詳細はここ[HTML5]とここ[HTML 4.01]です。)要素がある場合、ブラウザーはコンテンツを無視することになっていますが、ほとんどの場合は無視されます。多くの。:-)src
src