다른 구문을 가진 익명 함수는 JavaScript에서 기능적으로 동일합니까?
JavaScript에서 (function() { })() 및 ( function() { }())는 "foo"와 "bar"를 연속해서 표시하여 동일한 작업을 수행하는 것처럼 보일 수 있습니다. 그러나 특정 조건에서는 이 두 구문 사이에 미묘한 차이가 있습니다.
코드 블록 1:
(function() { bar = 'bar'; alert('foo'); })(); alert(bar);
코드 블록 2:
(function() { bar = 'bar'; alert('foo'); }()); alert(bar);
기능적으로 동일함
수정 사항이 없으면 두 코드 블록은 기능적으로 동일합니다. 익명 함수를 생성하고 즉시 실행한 다음 함수 내에 정의된 bar 변수에 액세스합니다.
수정과의 차이점
그러나 이러한 수정자를 도입하면 함수 호출 전에 새 항목을 추가하거나 함수 호출 뒤에 뭔가를 추가하면 동작이 변경됩니다.
new 및 .prop가 있는 코드 블록 1:
new (function() { this.prop = 4; }) ().prop;
이 코드는 익명 함수의 새 인스턴스를 만들고 해당 prop 속성에 액세스합니다. 4를 반환합니다.
new 및 .Class가 포함된 코드 블록 2:
new ( function() { return { Class: function() { } }; }() ).Class;
반대로 이 코드는 Class 속성에서 new를 호출합니다. 외부 괄호 안의 추가 괄호로 인해 함수 호출은 새 표현식의 일부가 아닙니다. 대신 일반적으로 함수를 호출하고 클래스 인스턴스인 반환 값을 반환합니다.
요약하면 (function() { })() 및 (function() { }())는 모두 기능적으로 일반적인 조건에서는 동일하지만 실행 방법에 영향을 미치는 수정자와 결합하면 다르게 동작합니다.
위 내용은 다른 구문을 가진 익명 함수가 수정자와 결합되면 JavaScript에서 다르게 동작합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!