JavaScript의 함수 선언 및 함수 표현식 상세 정보
1772 단어 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 엔진이 위 코드를 실행하는 순서는 다음과 같습니다.
엄밀히 말하면 JavaScript에서 함수를 만들면 함수 구조법이라는 또 다른 방법이 있습니다.
var foo = Function('alert("hi!");');
var foo = new Function('alert("hi!");'); //
이 방법은 문자열을 매개 변수로 함수체를 형성한다.그러나 이런 방법으로 집행 효율이 떨어지고 매개 변수를 전달할 수 없을 것 같으니 적게 사용하는 것이 좋다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.