"use strict";

// strict modeが適用されるコード
"use strict";

function exampleFunction() {
    nonDeclaredVar = 10; // ReferenceError: nonDeclaredVar is not defined
}

exampleFunction();
"use strict"

// ここから厳格モードが適用されます。
"use strict";

// このファイル全体に厳格モードが適用されます。
function myFunction() {
    "use strict";
    
    // 厳格モードはこの関数内のみ適用されます。
}
<script type="module">
    function myStrictFunction() {
        // モジュールであるため、基本的に厳格モードが適用されます。
    }
    
    export default myStrictFunction;
</script>
"use strict"

function exampleStrict() {
    strictVar = 10; // ReferenceError: strictVar is not defined
}

exampleStrict();
function exampleNonStrict() {
    nonStrictVar = 20; // No error、暗黙的にグローバル変数として処理される
}

exampleNonStrict();
console.log(nonStrictVar); // 20
"use strict"

const sealedObject = Object.seal({ prop: 10 });

// 厳格モードでは、拡張不可能なオブジェクトにプロパティを追加しようとするとエラーが発生します。
sealedObject.newProp = 20; // TypeError: Cannot add property newProp, object is not extensible
const nonStrictSealedObject = Object.seal({ prop: 10 });

// 厳格モードでなければ、拡張不可能なオブジェクトに値を代入してもエラーは発生しません。
nonStrictSealedObject.newProp = 20; // No error、新しいプロパティがオブジェクトに追加されます
"use strict"

function strictExample(param1, param1) {
    console.log(param1);
}

strictExample(10, 20); // SyntaxError: Duplicate parameter name not allowed in this context
function nonStrictExample(param1, param1) {
    console.log(param1);
}

nonStrictExample(10, 20); // 20 (2番目の引数の値)
"use strict"

function strictFunction() {
    return this;
}

console.log(strictFunction()); // undefined
function nonStrictFunction() {
    return this;
}

console.log(nonStrictFunction()); // グローバルオブジェクト(ブラウザ環境では window)
"use strict"

// 厳格モードを適用しない場合
var globalVar = 10;

function someFunction(x) {
    y = x * 2; // エラーが発生する可能性があります
    return y;
}

// 厳格モードを適用した場合
var globalVar = 10;

function someFunction(x) {
    var y = x * 2; // 変数を明示的に宣言
    return y;
}