2017-11-14 1 views
4

이 질문은 함수 선언 VS 함수 표현을 고려하여 태어났습니다."함수 선언"을 "함수 명령문"으로 정의 할 수 있습니까?

우리는 분명히 함수 선언은 함수 표현식이 양식을 가질 수있는 반면

function foo() { 
    var a = 3; 
    console.log(a); 
} 

(function foo() { 
    var a = 3; 
    console.log(a); 
})() 

가 보면 (즉시 호출 함수 표현식처럼 알려진처럼 나타나는)이 양식을 알고 즉각적으로 호출 된 함수 표현식은 parethesis에 싸여있는 첫 번째 함수 (함수 선언에 사용 된 함수)를 알 수 있습니다.

요점은 다음과 같습니다. 그룹화 연산자 (일반적으로 "parethesis"())는 표현식 만 포함 할 수 있음을 알고 있습니다. 이것이 사실이라면 나는 함수 선언도 function 문이라고 말할 수 없다. (괄호 안에 문장을 싸서 말하는 것이기 때문에).

그래서 도움을 좀 주시겠습니까? 조금 혼란 스럽습니다. 함수 선언도 함수 문입니까? 그렇다면 괄호 안에 싸인 함수는 명령문입니까?

필자는 함수 선언과 함수 표현의 차이점에 대해 묻지 않을 것임을 분명히해야합니다. 내가 그들과 그들의 차이점을 언급한다면 내 질문을 설명하는 것입니다 : "함수 선언"또한 "함수 선언문"입니까?

+1

많은 표현식 또한 문입니다. –

+1

"함수 표현식은 함수 구문과 매우 유사하며 함수 구문과 거의 같은 구문을 사용합니다 (자세한 내용은 function 문 참조). 함수 표현식과 함수 구문의 주된 차이점은 함수식입니다.이 표현식은 함수식에서 생략 할 수 있습니다 익명 함수를 만들 수 있습니다. 함수 표현식은 정의되는 즉시 실행되는 IIFE (Immediately Invoked Function Expression)로 사용할 수 있습니다. "- https://developer.mozilla.org/en-US/docs/Web/JavaScript/참조/연산자/함수 – zfrisch

+0

[식과 명령문의 차이점은 무엇입니까?] 가능한 복제본 (https://stackoverflow.com/questions/32343679/what-is-the-difference-between-an-expression- and-a-statement) – zfrisch

답변

1

인 식 호이 스팅은 발생하지 않지만 함수 문안 호이 스팅이 발생합니다.

함수 선언문에서는 함수 호출 전후에 js 파일의 아무 곳이나 함수 정의를 쓸 수 있습니다. JIT 컴파일러는 프로그래밍 파일의 맨 위에 올릴 것입니다.

함수 표현식의 경우 JIT 컴파일러는 function statement와 동일한 기능을 수행하지 않습니다. 정의되기 전에 함수에 액세스하려고하면 유형 오류가 표시됩니다.

IIFE는 주로 외부 변수의 액세스를 피하기 위해 사용되는 패턴입니다.

3

함수 식의 구문은 함수 선언과 동일하지만

callMe(); // Function statement 
 

 
function callMe(){ 
 

 
return console.log("I am function statement"); 
 
} 
 

 

 
// callMe2(); // TypeError if you call before expression defined. 
 

 
var callMe2 = function(){ 
 
    return console.log("I am function expression"); 
 
}; 
 

 
callMe2(); //Function expression call 
 

 
(function(){ 
 
return console.log("I am IIFE"); 
 
}());

, 그들은 같은 일이 아니에요.

함수 선언에 사용 된 이름의 범위는 명명 된 함수 식과 다릅니다. 당신이 쓸 때 (이 최고 수준에있는 경우 또는 지구 환경)

function foo() { 
    var a = 3; 
    console.log(a); 
} 

foo의 범위는 둘러싸고있는 기능입니다.

당신은 쓸 때 :

(function foo() { 
    var a = 3; 
    console.log(a); 
}) 

foo의 범위는 단지 함수의 기관이다.

구문 분석기는 컨텍스트를 기반으로하는 함수 식인지 선언인지를 결정합니다.문장은 괄호 안에 들어갈 수 없기 때문에 괄호를두면 표현식이됩니다.

관련 문제