JavaScript의 함수 선언 및 함수 표현식 상세 정보

1772 단어 JavaScript함수
JavaScript에서 함수를 생성하려면 함수 선언, 함수 표현식 등 두 가지 방법이 있습니다.

//  : 

function foo() {}


//  : 
var foo = function () {};

또한 새로운 역할 영역을 만드는 데 사용되는 자체 실행 함수 표현식도 있습니다. 이 역할 영역에 설명된 변수는 다른 역할 영역 내의 변수와 충돌하거나 혼동되지 않으며 대부분 익명 함수 방식으로 존재하며 즉시 자동으로 실행됩니다.

(function () {
  // var x = ...
})();

이 자행 함수 표현식은 상기 두 가지 방법의 두 번째 방법으로 분류되고 함수 표현식이라고 할 수 있다.
방법1과 방법2는 모두 하나의 함수를 만들었고foo라고 명명했지만 양자는 여전히 차이가 있다.JavaScript 해석기에는 변수 성명이 향상(hoisting)되는 메커니즘이 존재한다. 즉, 변수(함수)의 성명은 역할 영역의 맨 앞으로 향상되고, 코드를 쓸 때 맨 뒤에 쓰더라도 맨 앞으로 향상된다.
예를 들어 다음 코드 세그먼트:

alert(foo); // function foo() {}
alert(bar); // undefined
function foo() {}
var bar = function bar_fn() {};
alert(foo); // function foo() {}
alert(bar); // function bar_fn() {}

출력 결과는 function foo () {}, undefined, function foo () {}, function bar_fn() {}.
foo의 성명은alert에 쓰여진 후에도 정확하게 호출될 수 있음을 알 수 있습니다. 왜냐하면 자바스크립트 해석기는 이를 alert 앞으로 끌어올릴 것이고, 함수 표현식으로 만든 함수bar는 이 대우를 받지 않기 때문입니다.
그렇다면bar는 도대체 향상되었을까요? 그 실용적인 var 성명의 변수는 모두 향상됩니다. 단지 선부여된 값이undefined일 뿐입니다. 그래서 두 번째alert는undefined를 팝업했습니다.
따라서 JavaScript 엔진이 위 코드를 실행하는 순서는 다음과 같습니다.
  • 변수foo와bar를 만들고 값을 undefined로 지정합니다.
  • 함수foo의 함수체를 만들고 변수foo에 값을 부여합니다..
  • 앞의 두 개의 alert를 실행합니다.
  • 함수 생성bar_fn, 그리고 bar에 값을 부여합니다..
  • 뒤에 있는 두 개의 alert를 실행..
  • 주:
    엄밀히 말하면 JavaScript에서 함수를 만들면 함수 구조법이라는 또 다른 방법이 있습니다.
    
    var foo = Function('alert("hi!");');
    var foo = new Function('alert("hi!");'); //  
    
    
    이 방법은 문자열을 매개 변수로 함수체를 형성한다.그러나 이런 방법으로 집행 효율이 떨어지고 매개 변수를 전달할 수 없을 것 같으니 적게 사용하는 것이 좋다.

    좋은 웹페이지 즐겨찾기