code

중괄호 뒤에 세미콜론을 언제 사용해야합니까?

codestyles 2020. 12. 3. 07:53
반응형

중괄호 뒤에 세미콜론을 언제 사용해야합니까?


함수 선언 후 또는 모듈 패턴 스크립트의 익명 "반환"함수 뒤에 세미콜론이 사용되는 것을 여러 번 보았습니다. 중괄호 뒤에 세미콜론을 사용하는 것이 적절한 경우는 언제입니까?


문 뒤에 세미콜론을 사용합니다. 이것은 진술입니다.

var foo = function() {
  alert("bar");
};

변수 할당이기 때문입니다 (즉, 익명 함수를 만들고 변수에 할당하기).

명령문이 아니라 마음에 떠오르는 두 가지는 함수 선언입니다.

function foo() {
  alert("bar");
}

및 블록 :

{
  alert("foo");
}

참고 : 세미콜론이없는 동일한 블록 구조는 for, dowhile루프 에도 적용됩니다 .


코드를 축소하려는 경우에도 중요합니다.

그래서 개인적 }으로 ASI가 삽입 할 때마다 하나씩 추가 합니다.

JavaScript로 ASI에 대한 게시물을 작성했습니다 .


세미콜론을 사용하지 마십시오.

... 일상적인 함수 선언 인 경우 :

function foo() {

} // No semicolon


세미콜론을 사용하십시오.

... 과제 인 경우 :

var foo = function() {

}; // Semicolon


... 또는 자체 호출 함수 :

(function () {

})(); // Semicolon

그럴 필요가 없습니다. 언제든지 가능합니다 ( else이전 제외 while).

설명:

불행히도 자바 스크립트 세미콜론은 선택 사항입니다.
따라서 세미콜론을 추가 할 필요가 없습니다.

세미콜론으로 모든 을 종료하는 것이 (매우) 좋은 습관 입니다.
}끝나는 문은 객체 리터럴 (예 : JSON) 또는 함수 식으로 끝나는 문뿐입니다 .

따라서 모범 사례는 다음 두 개의 중괄호 뒤에 세미콜론을 넣는 것입니다 (전용).

var myFunc = function() { };
var myobject = { };

자체 호출 함수가있는 경우 앞에 세미콜론을 넣어야합니다. 그렇지 않으면 이전 할당 명령문의 일부가됩니다. 다음을 고려하세요:

testClass = function(name) {
  document.write ("Instantiating testClass<br />");
  this.name = name;
}

testClass.prototype.report = function() {
  document.write ("I'm " + this.name + "<br />");
  return 1;
}

testClass.prototype.testMethod = function(param) {
  document.write ("Running testMethod with parameter value " + param + "<br />");
  return 2;
} // notice that there is no semicolon here

(function() {
  document.write ("Running self-invoking function<br />");
  return 3;
}());

if (typeof(testClass.prototype.testMethod) !== "function") {
  document.write ("testMethod type: " + typeof(testClass.prototype.testMethod));
  document.write (", value: " + testClass.prototype.testMethod + "<br />");
}
var testOb = new testClass("Bill");
testOb.report();
testOb.testMethod(4);


그러면 다음과 같은 출력이 생성됩니다.

"자체 호출 함수
실행 매개 변수 값 3으로
testMethod 실행 testMethod 유형 : 숫자, 값 : 2
testClass
I 'm Bill 인스턴스화 "

... 브라우저에 의해보고 된 JavaScript 오류 : testOb.testMethod is not a function

이것은 확실히 우리가 의도 한 것이 아닙니다. testMethod클래스를 인스턴스화하기 전에 즉시 실행됩니까? 멤버 메서드로 호출 할 때 더 이상 존재하지 않는 이유는 무엇입니까?

What is happening is that testMethod is being assigned not our function definition, but the return value of the function definition. And the function definition itself is being run anonymously. This is how:

  1. The testClass constructor and the member method report are successfully defined/assigned.
  2. Because of the lack of a semicolon after the definition for testMethod, the () surrounding the following self-invoking function becomes an invocation operator, which causes what we think is our definition of testMethod to become an anonymous function that is invoked immediately, and the return value of the following anonymous function becomes its parameter list. This explains the order of printed output - our self-invoking function is run first as it is evaluated as a parameter.
  3. Since our intended function definition returns 2, it is this 2 that is assigned to testMethod, and not the function definition. This is confirmed by our printing of the type and value of testMethod.
  4. Now testClass is successfully instantiated as testOb and its report method works as intended, proving that the class definition is otherwise intact.
  5. When we try to call testMethod, we are told by the interpreter that it is not a function - and rightly so, because it is a number with the value 2.

If we put a semicolon after the definition of testMethod, it will separate its assignment from the calling of the self-invoking function, and we will have the result we expected:

"Running self-invoking function
Instantiating testClass
I'm Bill
Running testMethod with parameter value 4"



Or we could even put it directly before the anonymous function:

;(function() {...

But I suggest that since the problem is due to the lack of a semicolon at the end of an assignment statement, we should perhaps make a habit of always putting a semicolon after defining functions in this way. i.e. all of my functions above should have a semicolon after the closing brace, because they are all assignments of anonymous functions.


You also should use a semicolon after a curly bracket after returning a function within a function in Javascript.

function watchOut(problem) {
  return function(number, location) { 
    alert("Be careful! There are " + problem +
          " today!\n" +

          number + " have been spotted at the " + location + "!"
    );
  };
}

Semicolons go at the end of lines that do not end in a curly brace or to separate statements on the same line. It does no harm to use them after a closing brace, or to wear suspenders and a belt, but it does look a little nerdy.


I know this thread is old but couldn't resist to share this code:

// this will break code

a=b=c=d=e=1
a = b + c     //semicolon required here
(d + e).toString()

Will return "Property of object [object Object] is not a function". Because it will actually be executed as:

a = b + c(d + e).toString()

참고URL : https://stackoverflow.com/questions/2717949/when-should-i-use-a-semicolon-after-curly-braces

반응형