Нужно ли "использовать строгую" во внешних js файлах, если наш html файл уже "использует строгий"?

Нужно ли "использовать строгую" в внешних js файлах, если наш html файл (который импортирует внешние js файлы) уже "использует строгий"?

И если наши внешние js файлы не имеют "use strict", они все еще "строгие" в HTML файле, который "использует строгий"?

Пример:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script>
        "use strict";
        function f() {
            // calling File1 functions (File1 does not have "use strict"; at the top)
            // are the File1 functions "strict"?
        }
    </script>
    <script src="File1.js"></script>
    <script>
        //by the way.. is it strict here ?
    </script>
</head>
<body>
</body>
</html>

Ответ 1

Вы должны поместить "use strict"; (или 'use strict';) вверху каждого script (или функции), чтобы сделать их строгими. В вашем примере функции в File1.js не будут строгими, и не будет второго блока. Подробнее см. https://developer.mozilla.org/en/JavaScript/Strict_mode#Invoking_strict_mode.

Если это не так, использование строгого режима может привести к аннулированию сторонних скриптов, которые вы импортируете, поэтому имеет смысл, что строгость применяется только к скриптам и отдельным функциям, которые вы явно указываете.

Например:

external.js:

console.log("C: This script is non-strict.");

var g = function (x) {
    console.log("g is non-strict regardless of caller.");
    return 2 * x;
};

test.html:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script>
        "use strict";
        console.log("A: This script element is strict.");
        function f() {
            console.log("The strictness of a script does not affect" +
                    " the strictness of external scripts, so g is" +
                    " still non-strict when called from f.");
            return g(3);
        }
    </script>
    <script src="external.js"></script>
    <script>
        f();
        console.log("B: This script element is non-strict.")
    </script>
</head>
<body>
</body>
</html>