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;
이 코드 new
는 Class
속성을 호출 합니다.
함수 호출을위한 괄호는 바깥 쪽 괄호 세트 안에 있기 때문에 new
표현식에 의해 선택되지 않고 대신 함수를 정상적으로 호출하여 반환 값을 반환합니다. 식은까지 구문 분석 하고를 인스턴스화합니다. (뒤의 괄호 는 선택 사항)new
.Class
new
다음과 같습니다.
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
'programing' 카테고리의 다른 글
npm은 루트로 실행하지 않는 것을 어떻게 / 왜 권장합니까? (0) | 2021.01.15 |
---|---|
RequireJS를 사용하여 전역 객체 또는 싱글 톤을 어떻게 전달합니까? (0) | 2021.01.15 |
콘텐츠 길이 헤더없이 S3로 파일 업로드를 스트리밍 할 수 있습니까? (0) | 2021.01.15 |
엔티티 프레임 워크 6에 MySQL 연결을 사용할 수 없습니다. (0) | 2021.01.15 |
동적 크기 UICollectionView 셀 (0) | 2021.01.15 |