Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Зачем такая синтаксическая конструкция? (https://javascript.ru/forum/misc/76368-zachem-takaya-sintaksicheskaya-konstrukciya.html)

Начинающий-Js-кодер 05.01.2019 02:49

Зачем такая синтаксическая конструкция?
 
Часто вижу в коде делают так:
;(function() {
	'use strict';
 
})();

Зачем перед анонимной функцией ставят ; ? нигде в книгах об этом не нашел.

j0hnik 05.01.2019 09:02

чтобы не засорять глобальное пространство

рони 05.01.2019 10:21

Цитата:

Сообщение от Начинающий-Js-кодер
Зачем перед анонимной функцией ставят ;

защита от ... , чтобы не сломать другой код.

Начинающий-Js-кодер 05.01.2019 12:31

Цитата:

Сообщение от j0hnik (Сообщение 501349)
чтобы не засорять глобальное пространство

Я не о анонимной функции.

А если в другом коде в конце будет ; в конце код будет сломан или как?

laimas 05.01.2019 12:42

var a = 2 + 5
alert(a)


прошедший обфускацию

var a=2+5alert(a)


Если "сливать" в один несколько js файлов сжатых, то могут возникать подобные ошибки, поэтому и предваряют их ;

Aetae 05.01.2019 12:46

Начинающий-Js-кодер, гипотетически этот код может быть склеен с другим в один файл. Опять же гипотетически в том файле в последней строчке может не стоять ";". Тогда скобки могут бы интерпретированы как вызов функции:
var getBindedAlert = function(msg){
 return alert.bind(window, 'Внезапно: ' + msg);
}

(function() {
	'use strict';
 
})();
var getBindedAlert = function(msg){
 return alert.bind(window, 'Внезапно: ' + msg);
}

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


...upd: laimas, обфускаторы обычно как раз нормально разруливают такое.

laimas 05.01.2019 13:12

Цитата:

Сообщение от Aetae
обфускаторы обычно как раз нормально разруливают такое

Ага, если бы все :) Не так давно столкнулся с подобным, когда рабочий код не работал на сайте, а там свой сборщик, пришлось разбираться в строке, что он не так делает.

Начинающий-Js-кодер 05.01.2019 15:58

Понял. Спасибо всем.


Часовой пояс GMT +3, время: 18:15.