2017-11-03 8 views
0

아래의 2 가지 기능에 대해서는 스크립트를 읽을 때 기능 B가 기능 A처럼 즉시 실행되지 않는다는 것을 이해하지 못합니다.익명 함수와 함수 표현식이있는 변수 문과의 차이점은 무엇입니까?

대신 나는 첫 번째 기능은 바로 때문에 최종 ()의 (인생)을 실행하는 기능 B.

//Function A 
(function() { 
    console.log("startTick"); 
    clockSection.textContent = getTime(); 

})(); 


//Function B 
var startTick = function() { 
    console.log("startTick"); 
    clockSection.textContent = getTime(); 

}; 
+0

) 기능. 당신은 첫 번째 예제에서는 있지만 두 번째 예제에서는 없습니다. 첫 번째 예에서'()'는 무엇이라고 생각 했습니까? –

답변

0

첫 번째 것은 익명의 함수가 아니라 "즉시 호출 된 함수 식"(또는 간단히 IIFE)입니다.

함수 자체는 괄호 안에있는 것으로 그냥 실행되지 않고 그 괄호 안에 정의하여 호출 한 다음 표현식의 마지막에 ()을 통해 호출합니다. 여전히을 사용해야했습니다. 두 번째 것처럼했습니다. 이름이없고 변수, 상수 또는 저장되지 않았기 때문에 나중에 수행 할 수 없었을 것입니다. 그것을 실행합니다.

두 번째 것은 실제로 여전히 익명의 함수이므로 괄호로 묶고 바로 호출하는 대신 var에 할당했습니다.

명명 된 기능은 다음과 같습니다 : 그것이 VAR 또는 어떤 방법으로 지정되지 않은

function startTick(){ 
    ... 
} 

공지 사항이 아니라, 이름이 function 키워드 뒤에 정의 하였다. 한 가지 중요한 차이점은 함수에서 정의 된 행 앞에 코드에서 명명 된 함수를 호출 할 수 있다는 것입니다 (여기에 대한 자세한 내용은 여기 var functionName = function() {} vs function functionName() {}에 대한 자세한 내용은 여기 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions

0

startTick();를 호출해야합니다. 두 번째는 startTick() (함수 표현식)이라고해야합니다. 변수에 함수를 할당하고 실행하지 않기 때문입니다.

IIFE - 즉시 호출되는 함수 표현식 - 일반적으로 모듈 또는 코드 집합을 캡슐화하는 방법으로 사용됩니다. 네임 스페이스로 사용되는 클로저를 만듭니다.

함수 표현식은 일반적으로 명명 된 함수 대신 사용되지만 실제 용도는 없습니다. 그것은 스타일의 문제입니다.

+0

그는 그 질문에 말했다. –

+0

해부들. 당신 말이 맞아요. – ktilcu

2

먼저 함수를 선언하십시오 : (function(){}) 다음에 (function(){})()이라고 부릅니다. 함수 A에서 함수 선언 다음에 괄호가 있음을 주목하십시오. callint입니다. 함수 B가 호출되지 않고 방금 선언되었습니다.

+0

함수 B에서 startTick 변수에 익명 함수가 지정되면 명시 적으로 호출 할 때까지 블록 내부로 들어 가지 않습니다. –

+0

@AkashSharma : 예, 함수는 호출 될 때까지 실행되지 않습니다. * 함수 선언 * 함수 호출 *은 두 개의 별도 프로세스입니다. http://eloquentjavascript.net/03_functions.html을 읽어 보시기 바랍니다. –

0
function func_name(){...} 

이것은 함수 선언입니다. 이 구문으로 함수가 수행하는 작업을 정의합니다. 그러나 선언 직후에 자동으로 실행되지는 않습니다.

당신은 당신이 다른 곳에서 함수를 선언 한 후에는 일반적으로

func_name() 

하여 함수를 호출하는 기능을 실행할 때마다.

그래서 귀하의 질문에 대답 :

기능 A를 : 매우 첫 번째 쌍의 괄호 내부 은 함수의 선언입니다. 두 번째 괄호 쌍은 실제로 함수를 호출하는 곳입니다.

함수 B : 이것은 단지 자동으로 실행되지 않는 선언입니다. 그럼 실행하고 싶다면 func_name()

에 의해 호출하십시오. 잘하면, 이것은 분명합니다.