JavaScript의 함수 호출 구문: 뉘앙스 탐색
JavaScript에서 함수 호출 구문은 다양할 수 있으며, 이는 함수에 대한 질문으로 이어집니다. 등가. 다음 두 코드 블록을 고려하세요.
(function() { bar = 'bar'; alert('foo'); })(); alert(bar);
(function() { bar = 'bar'; alert('foo'); }()); alert(bar);
두 코드 블록 모두 성공적으로 "foo"에 대해 경고한 다음 "bar"에 대해 경고합니다. 유일하게 눈에 띄는 차이점은 })() 및 }())를 사용하는 것 같습니다. 마지막에. 그렇다면 이 두 접근 방식 사이에 기능적 차이가 있습니까?
동일한 기능
이 특정 시나리오에서는 두 구문 간에 기능적 차이가 없습니다. 두 형식 모두 익명 함수 내에서 코드를 실행하여 'bar' 값을 변수 bar에 할당하고 경고 메시지를 의도한 대로 표시합니다. 따라서 기능적으로는 동일합니다.
차이가 발생할 때
그러나 두 구문이 서로 다른 결과를 생성하는 상황이 있습니다. 다음 수정 사항을 고려하세요.
new (function() { this.prop = 4; })().prop;
new ( function() { return { Class: function() { } }; }() ).Class;
첫 번째 코드 블록에서 new는 클래스의 새 인스턴스를 만드는 데 사용되며 해당 인스턴스의 prop 속성에 액세스됩니다. 이는 값 4를 반환합니다.
반대로 두 번째 코드 블록은 함수에서 반환된 객체의 Class 속성에 대해 new를 호출합니다. 함수 호출을 둘러싼 괄호는 바깥쪽 괄호 안에 있으므로 new를 트리거하지 않고 함수를 정상적으로 실행합니다. 따라서 Class 속성이 대신 인스턴스화됩니다.
결론
대부분의 경우 })() 및 }()); 기능적 영향 없이 기능을 호출하기 위해 상호 교환 가능합니다. 그러나 괄호 앞에 new를 사용하거나 괄호 뒤에 연산을 수행하면 구문이 코드 동작에 영향을 줄 수 있습니다. 의도한 대로 작동하는 JavaScript 코드를 작성하려면 이러한 미묘한 차이를 인식하는 것이 중요합니다.
위 내용은 JavaScript에서 `})()`와 `}());` 사이에 기능적 차이가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!