[javascript] Javascript의 모든 함수 뒤에 세미콜론을 사용해야하는 이유는 무엇입니까?

자바 스크립트에서 함수 뒤에 세미콜론이 포함 된 다른 개발자가 있지만 일부는 그렇지 않았습니다. 가장 좋은 방법은 무엇입니까?

function weLikeSemiColons(arg) {
   // bunch of code
};

또는

function unnecessary(arg) {
  // bunch of code
}



답변

함수 선언 후 세미콜론 은 필요하지 않습니다 .

의 문법 FunctionDeclaration은 다음과 같이 사양에 설명되어 있습니다 .

function Identifier ( FormalParameterListopt ) { FunctionBody }

문법적으로 세미콜론이 필요하지 않지만 왜 그런지 궁금 할 수 있습니까?

세미콜론은 명령문 을 서로 분리하는 역할을 하며 a FunctionDeclaration명령문 이 아닙니다 .

FunctionDeclarations코드가 실행 되기 전에 평가 됩니다. 호이 스팅 은 이 동작을 설명하는 데 사용되는 일반적인 단어 입니다.

ECMAScript 사양에 설명 된 함수 명령문이 없기 때문에 “함수 선언”및 “함수 명령문”이라는 용어는 종종 서로 바꿔서 잘못 사용됩니다. 비표준입니다.

그러나 다음과 같이 세미콜론을 사용하는 경우 항상 권장됩니다 FunctionExpressions.

var myFn = function () {
  //...
};

(function () {
  //...
})();

위 예제에서 첫 번째 함수 다음에 세미콜론을 생략하면 원하지 않는 결과가 나타납니다.

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

첫 번째 함수는 두 번째 함수를 둘러싼 괄호 Arguments가 함수 호출의 것으로 해석되므로 즉시 실행됩니다 .

추천 강의 :


답변

변수로 함수 선언 후에 사용합니다.

var f = function() { ... };

그러나 고전적인 스타일 정의 후에는 아닙니다.

function f() {
    ...
}


답변

JS Lint 는 사실상의 규칙이며 함수 본문 뒤에 세미콜론이 없다고 말합니다. “세미콜론” 섹션을 참조하십시오 .


답변

일관성을 유지하십시오! 그것들은 필요하지 않지만 대부분의 축소 기술은 세미콜론 (예 : Packer )에 의존하기 때문에 개인적으로 사용합니다 .


답변

실제로 당신의 취향에 달려 있습니다. Java, C ++, C # 등에 익숙하기 때문에 세미콜론으로 코드 줄을 끝내고 싶습니다. 그래서 자바 스크립트에서 코딩에 동일한 표준을 사용합니다.

나는 일반적으로 세미콜론으로 함수 선언을 끝내지는 않지만 내 선호 사항입니다.

브라우저는 어느 쪽이든 작동하지만 언젠가는이를 규제하는 더 엄격한 표준을 제시 할 것입니다.

내가 쓸 코드의 예 :

function handleClickEvent(e)
{
     // comment
     var something = true;  // line of code
     if (something)  // code block
     {
        doSomething();  // function call
     }
}


답변

실제로는 규칙이나 일관성 문제가 아닙니다.

나는 것을 상당히 확신 하지 가 문장의 끝이 어디 있는지 파악하기 때문에 내부 파서 아래 모든 문 감속 후 세미콜론을 배치. 나는 당신이 긍정적으로 그것을 확인할 수있는 편리한 번호를 가지고 있었으면하지만, 당신은 그것을 직접 구글 할 수 있습니다. 🙂

또한 코드를 압축하거나 축소 할 때 세미콜론이 없으면 모든 공백이 없어져 원하는 작업을 수행하지 않는 스크립트 버전이 축소 될 수 있습니다.


답변

스크립트를 축소 할 때 등호로 시작하는 함수에 세미콜론을 사용해야한다는 것을 깨달았습니다. 함수를 var로 정의하면 예, 세미콜론을 사용해야합니다.

세미콜론이 필요합니다

var x = function(){};
var x = new function(){};
this.x = function(){};

세미콜론 필요 없음

function x(){}