> 웹 프론트엔드 > JS 튜토리얼 > js는 함수를 즉시 실행합니다. (function ( ){})( )와 (function ( ){}( ))의 차이점은 무엇입니까?_javascript 기술

js는 함수를 즉시 실행합니다. (function ( ){})( )와 (function ( ){}( ))의 차이점은 무엇입니까?_javascript 기술

WBOY
풀어 주다: 2016-05-16 15:31:19
원래의
1057명이 탐색했습니다.

차이가 없습니다.

IIFE의 원리를 이해해야 합니다. 간단히 설명하겠습니다.

코드 복사 코드는 다음과 같습니다.

function foo() {...} // 이것은 정의입니다. 선언입니다. 정의는 인터프리터에게 그것이 존재한다는 사실만 알릴 뿐 실행되지는 않습니다.
foo(); // 이것은 문장입니다. 문장을 만나면 인터프리터가 이를 실행합니다.

IIFE는 필수가 아닙니다. 더 전통적으로 작성하려면 다음과 같이 작성하세요.

코드 복사 코드는 다음과 같습니다.

함수 foo() {...}
foo();

그렇다면 왜 IIFE인가요?
1. 기존 방식은 번거롭고 정의와 실행이 별도로 작성되어 있습니다.
2. 기존 방식은 전역 네임스페이스(창 등 브라우저의 전역 객체)를 직접적으로 오염시킵니다.

그래서 개발자들은 위의 문제를 해결할 수 있는 방법을 찾고 싶어합니다. 그럼 이렇게 써도 괜찮나요?

함수 foo(...){}();

물론 그렇지 않습니다. 그런데 왜일까요? function foo(...){} 부분은 단지 명령문이기 때문에 인터프리터에게는 다음과 같은 구문 분석 함수를 사용해야 하는 문자열 "function foo(...){}"를 작성한 것과 같습니다. eval()을 실행합니다. 따라서 명령문 바로 뒤에 ()를 넣으면 실행되지 않습니다. 이는 잘못된 구문입니다.

어떻게 하면 올바르게 만들 수 있나요? 쉽게 말하면, 문장을 표현식(Expression)으로 바꾸면 됩니다.

실제로 표현식을 변환하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 함수 선언을 () 쌍으로 감싸는 것입니다.

코드 복사 코드는 다음과 같습니다.

(function foo() {...}) // 이는 의도적인 줄 바꿈이며 실제로는 다음 괄호로 연결될 수 있습니다.
();

다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

var foo = function () {...}; // 정의가 아니라 표현식입니다.
foo();

하지만 이전에 작성이 불가능하다고 했던 방식은 실제로는 괄호로 직접 묶을 수도 있습니다.

(함수 foo(){...}());

그렇다면 차이가 있나요? 매우 간단합니다. 아니요~

또한 방금 말씀드린 것처럼 표현을 변형하는 방법에는 여러 가지가 있습니다. 다음과 같이 표현을 작성하는 방법도 많이 있습니다.

!function foo() {...}();

또는

함수 foo() {...}();

모두 괜찮습니다.

저는 개인적으로 void를 사용하여 표현식을 변환하는 것을 선호합니다. 이 키워드에는 반환 값이 없기 때문입니다. 하지만 이 점은 별로 중요하지 않습니다. 그냥 나를 "거북이"로 대하십시오…

코드 복사 코드는 다음과 같습니다.

무효 함수 () {
//정말 필요한 코드는 다음과 같습니다
}();

좋아, 소위 전역 네임스페이스를 오염시키지 않는다는 것은 IIFE가 새로운 함수 범위를 생성하고 실제 비즈니스 코드가 그 안에 캡슐화되어 자연스럽게 전역 객체를 건드리지 않기 때문입니다. 전역 개체가 필요한 경우 IIFE에 전달하세요.

코드 복사 코드는 다음과 같습니다.

void 함수(전역) {
//여기서 global은 전역 객체입니다
}(this) // 브라우저에서는 이것이 윈도우 객체입니다

여기서 시리즈를 작성했는데 그 중 하나는 범위 및 명명 승격에 대한 내용입니다. 관심이 있으시면 계속해서 읽어보실 수 있습니다. http:// www.jb51 .net/article/75090.htm

방법 1, 함수를 호출하고 반환 값을 가져옵니다. 함수가 직접 실행되도록 강제한 다음 참조를 반환한 다음 이를 호출하여 실행합니다.

두 번째 방법은 함수를 호출하고 반환 값을 가져오는 것입니다. 강제 연산자는 함수 호출을 실행하게 합니다
(function(){})(); 함수를 표현식으로 구문 분석한 다음 구문 분석된 함수를 실행하는 것입니다
var a = function(){} a()와 동일하며
함수를 얻습니다. (function(){}()); 함수 표현식을 직접 실행하고 명령문으로 실행하는 것입니다.
var a = function(){}(); a와 동일하며 결과를 얻습니다
결론은 똑같네요
()는 단지 자기실행의 역할을 할 뿐입니다
() 같은 게 더 많아요
예를 들어 함수 (){}
이는 (function (){})와 같습니다. 일반적으로 (function (){})에는 전역 변수를 방지하는 또 다른 효과가 있습니다

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿