programing

JavaScript에서 "(function () {}) ()"및 "(function () {} ())"기능이 동일합니까?

javaba 2021. 1. 15. 19:09
반응형

JavaScript에서 "(function () {}) ()"및 "(function () {} ())"기능이 동일합니까?


이 질문에 이미 답변이 있습니다.

경고 다음이 코드 블록 모두 foo다음 bar. 유일한 차이점은 })()}())입니다.

코드 1 :

(function()
{
    bar = 'bar';
    alert('foo');
})();

alert(bar);

코드 2 :

(function()
{
    bar = 'bar';
    alert('foo');
}());

alert(bar);

그렇다면 구문 외에 다른 점이 있습니까?


아니; 그들은 동일하다


단, new사전과 .something이후에 추가하면 달라집니다.

코드 1

new (function() {
    this.prop = 4;
}) ().prop;

이 코드는이 함수 클래스의 새 인스턴스를 만든 다음 새 인스턴스의 prop속성 을 가져옵니다 .
반환합니다 4.

다음과 같습니다.

function MyClass() {
    this.prop = 4;
}
new MyClass().prop;

코드 2

new ( function() {
    return { Class: function() { } }; 
}() ).Class;

이 코드 newClass속성을 호출 합니다.
함수 호출을위한 괄호는 바깥 쪽 괄호 세트 안에 있기 때문에 new표현식에 의해 선택되지 않고 대신 함수를 정상적으로 호출하여 반환 값을 반환합니다. 식은까지 구문 분석 하고를 인스턴스화합니다. (뒤의 괄호 는 선택 사항)
new.Classnew

다음과 같습니다.

var namespace = { Class: function() { } };

function getNamespace() { return namespace; }

new ( getNamespace() ).Class;
//Or,
new namespace.Class;

에 대한 호출 주위에 괄호가 없으면 다음 getNamespace()과 같이 구문 분석됩니다 (new getNamespace()).Class. getNamespace클래스 인스턴스화를 호출 Class하고 새 인스턴스 속성을 반환합니다 .


차이는 없습니다. 여는 중괄호는 구문 힌트 역할을하여 구문 분석기에게 뒤에 오는 것이 함수 선언 대신 함수 표현식 임을 알려줍니다 .


차이가 없습니다. 둘 다 함수 표현식입니다.

세 번째 방법도 있습니다.

+function() {
    bar = 'bar';
    alert('foo');
}();

( +다른 연산자 대신 도 작동합니다)

가장 일반적인 방법은

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

그러나.

참조 URL : https://stackoverflow.com/questions/5938802/are-function-and-function-functionally-equal-i

반응형