자바스크립트 라이브러리의 선두 세미콜론은 무엇을 합니까?
몇몇 자바스크립트 라이브러리에서는 맨 처음에 다음과 같은 표기법을 볼 수 있었습니다.
/**
* Library XYZ
*/
;(function () {
// ... and so on
나는 "즉시 실행되는 기능" 구문에 완벽하게 만족하지만
(function(){...})()
선두 세미콜론의 용도가 무엇인지 궁금합니다.제가 생각해 낼 수 있는 것은 그것이 보험이라는 것뿐입니다.즉, 라이브러리가 버그가 있는 다른 코드에 내장되어 있는 경우에는 "최후의 마지막 문장은 여기서 끝납니다"라는 일종의 속도 방지 장치 역할을 합니다.
다른 기능은 없습니까?
이를 통해 여러 개의 자바스크립트 파일을 하나로 안전하게 연결하여 하나의 HTTP 요청으로 보다 신속하게 처리할 수 있습니다.
가장 좋은 답은 실제로 질문에서 나왔기 때문에 명확한 설명을 위해 여기에 적어 두겠습니다.
선두를;
즉시 invoked 기능 표현식 앞에는 적절히 종료되지 않은 표현식을 포함하는 파일에 연결하는 동안 파일을 첨부할 때 오류를 방지하기 위해 있습니다.;
.
표현식을 세미콜론으로 종료하는 것이 가장 바람직하지만 선두 세미콜론을 보호 수단으로 사용하는 것도 좋습니다.
일반적으로 문장이 (, [, /, +, -)로 시작하는 경우 이전 문장의 연속으로 해석될 가능성이 있습니다./, +, - 로 시작하는 문장은 실제로는 매우 드물지만 (및 [] 로 시작하는 문장은 적어도 일부 스타일의 자바스크립트 프로그래밍에서 전혀 드물지 않습니다.어떤 프로그래머들은 이러한 문장의 시작에 방어적 세미콜론을 넣는 것을 좋아해서 문장이 수정되기 전에 문장이 수정되고 이전에 종결된 세미콜론이 제거되어도 계속 올바르게 작동할 것입니다.
var x = 0 // Semicolon omitted here
;[x,x+1,x+2].forEach(console.log) // Defensive ; keeps this statement separate
출처:
자바스크립트:The Definitive Guide, 6판
이를 선행 세미콜론이라고 합니다.
이것의 주된 목적은 문제를 일으킬 수 있는 부적절하게 닫혔던 이전 코드로부터 스스로를 보호하는 것입니다.세미콜론을 사용하면 이런 일이 발생하지 않습니다.이전 코드가 제대로 닫히지 않은 경우 세미콜론에서 이를 수정합니다.제대로 닫혔으면 세미콜론이 무해하고 부작용도 없을 것입니다.
한 줄짜리 답은 여러 개의 자바스크립트 파일을 안전하게 연결하는 것입니다.세미콜론을 사용해도 문제가 발생하지 않습니다.
다중 함수가 있다고 가정합니다.
IIFE 1
(function(){
// The rest of the code
})(); // Note it is an IIFE
IIFE 2
(function(){
// The rest of the code
})(); // Note it is also an IIFE
연결 시 다음과 같이 보일 수 있습니다.
(function(){})()(function(){})()
그러나 함수 앞에 세미콜론을 추가하면 다음과 같이 나타납니다.
;(function(){})();(function(){})()
그래서 a를 추가하면.;
, 표현이 적절하게 종료되지 않을 경우 주의해야 합니다.
예제2
다음과 같은 변수가 있는 JavaScript 파일이 있다고 가정합니다.
var someVar = "myVar"
일부 기능이 있는 또 다른 자바스크립트 파일:
(function(){})()
이제 연접하면 그렇게 보일 것입니다.
var someVar = "myVar"(function(){})() // It may give rise to an error
세미콜론을 사용하면 다음과 같이 나타납니다.
var someVar = "myVar";(function(){})()
자바스크립트 코드를 작게 할 때 좋습니다.예기치 않은 구문 오류를 방지합니다.
언급URL : https://stackoverflow.com/questions/1873983/what-does-the-leading-semicolon-in-javascript-libraries-do
'source' 카테고리의 다른 글
MySQL Workbench: 쿼리 오류(1064):1행의 'VISIBLE' 근처에서 구문 오류가 발생했습니다. (0) | 2023.11.05 |
---|---|
jQuery로 "바쁜" 표시기를 표시하는 방법? (0) | 2023.11.05 |
원본을 참조하는 동안 자바스크립트 함수 덮어쓰기 (0) | 2023.11.05 |
Git: 기록 커밋에서 파일을 제거하는 방법? (0) | 2023.10.31 |
24-48시간 전의 mysql 행을 어떻게 얻습니까? (0) | 2023.10.31 |