В javavscript, в чем разница между: (function () {use strict}) (); и использовать строго?

В чем разница между:

(function () {'use strict';})(); 

и "use strict".

Я не понимаю, когда и почему я могу использовать одно вместо другого?

Я думаю, что один объявляет полный внешний JS-документ строгим, а другой - строгим для функции.

Мое замешательство возникает, когда я вижу, что люди заключают свой полный внешний код JavaScript в:

(function () {'use strict';})(); 

Почему бы просто не начать документ с использования "use strict"?

Наконец, я протестировал внешний документ JS, используя тот же код. Во-первых, я использовал "use strict", и это сработало.

Другой я приложил полный JS-документ к (function () {'use strict';})();, и он не сработал.

Почему?

JavaScript - мой первый язык программирования, и я немного поражен его глубиной. Я очень благодарен за ваше терпение и профессиональное руководство, спасибо за любую помощь или направление, которое вы можете мне предложить.

Большое спасибо.


person Starkemp315    schedule 30.05.2019    source источник
comment
Один применяется к отдельной функции, другой - к каждой функции в файле. Может быть, применять его ко всему нежелательно.   -  person    schedule 30.05.2019


Ответы (2)


если ты

"use strict";

Вверху файла весь файл (то есть весь код в теге файла / скрипта, включая сторонние библиотеки [спасибо VLAZ за разъяснения]) является строгим.

Размещение его внутри IIFE:

(function() { "use strict"; })();

Означает, что только код внутри IIFE будет строгим.

person Jack Bashford    schedule 30.05.2019
comment
@VLAZ использовать строго в начале файла влияет только на этот файл. Это не влияет на другие прицелы. Это повлияет на каждый сценарий, объединенный в один файл, но не повлияет на другие файлы сценария. ES2015 также представил режим уровня модуля, который влияет на каждый сценарий в этом модуле. - person ; 30.05.2019
comment
@ Эми, спасибо. Тогда я понятия не имею, откуда я это взял - я перепроверил источники, в которых я думал, что видел это, но не видел. Наверное, это были галлюцинации. - person VLAZ; 30.05.2019

Что ж

(function() { "use strict"; })()

совершенно бесполезен; он ни на что не влияет.

В начале области видимости, например, функции или блока <script>,

"use strict";

сигнализирует интерпретатору, что вы хотите, чтобы код интерпретировался в «строгом» режиме. Если это функция, которая ничего не делает, она ни на что не влияет. Конечно, если фактическая функция, о которой вы говорите, имеет больше кода, чем просто оператор "use strict";, это означает, что эта функция будет интерпретироваться в «строгом» режиме.

person Pointy    schedule 30.05.2019
comment
Первоначально я проголосовал за вас, потому что комментарий о его бесполезности не нужен и не помог ответить на вопрос. Я думаю, что инсинуация помещает вызов строгого режима в верхнюю часть модуля IIFE, в котором есть код, но OP исключил код для краткости. Вы добавили дополнительную информацию, а я удалил голос против. Я все еще думаю, что OP означает, что в IIFE будет больше кода, помимо строгого вызова. - person zero298; 30.05.2019
comment
@ zero298 хорошо делать предположения о том, что опубликовал OP, - это то, чего я научился не делать после 10 лет на этом сайте; невозможно узнать, что происходит на самом деле. Может быть, OP означал, что будет больше кода, а может и нет. То, что я опубликовал в качестве ответа, включало точный код из вопроса. - person Pointy; 30.05.2019
comment
ИМО, новичкам особенно важно избегать предположений. - person ; 30.05.2019
comment
Большое вам спасибо, я очень ценю вашу помощь! @pointy Люблю свой Ван Эйк Авитар !! - person Starkemp315; 31.05.2019