>  기사  >  웹 프론트엔드  >  자바스크립트 함수 리터럴과 Function() 생성자의 차이점에 대한 자세한 예

자바스크립트 함수 리터럴과 Function() 생성자의 차이점에 대한 자세한 예

伊谢尔伦
伊谢尔伦원래의
2017-07-27 16:58:522343검색

함수 리터럴과 Function() 생성자의 차이점
함수 리터럴은 익명 함수이지만 재귀 함수를 작성할 때 함수 이름을 직접 지정할 수 있습니다. 아니요.

var f = function fact(x) { 
if (x < = 1) return 1; 
else return x*fact(x-1);
};

Function() 생성자를 사용하면 런타임 시 Javascript 코드를 동적으로 생성하고 컴파일할 수 있습니다. 이러한 방식은 전역 함수 eval()과 유사합니다.

Function() 생성자는 함수 본문을 구문 분석하고 실행될 때마다 새 함수 개체를 만듭니다. 따라서 루프나 자주 실행되는 함수에서 Function() 생성자를 호출하는 효율성은 매우 낮습니다. 대조적으로, 함수 리터럴은 만날 때마다 다시 컴파일되지 않습니다.

Function() 생성자를 사용하여 함수를 생성하면 일반적인 범위를 따르지 않으며 항상 최상위 함수로 실행됩니다.

var y = "global"; 
function constructFunction() { 
var y = "local"; 
return new Function("return y"); // 无法获取局部变量} 
alert(constructFunction()()); // 输出 "global" 函数直接量:

표현식 구문인 이상 스크립트 호스트는 함수를 직접 함수로 간주합니다. 아무것도 추가되지 않은 경우 function으로 시작하면 함수 선언으로 간주됩니다.

var a = 10 + function(){ 
return 5; 
}();
(function(){ 
alert(1); 
} ) ( ); 
( function(){ 
alert(2); 
} ( ) ); 
void function(){ 
alert(3); 
}() 
0, function(){ 
alert(4); 
}(); 
-function(){ 
alert(5); 
}(); 
+function(){ 
alert(6); 
}(); 
!function(){ 
alert(7); 
}(); 
~function(){ 
alert(8); 
}(); 
typeof function(){ 
alert(9); 
}();

js에서 함수를 정의하는 방법은 여러 가지가 있으며 함수 직접 수량도 그 중 하나입니다. 예를 들어 var fun = function(){}에서 함수가 fun에 할당되지 않은 경우 이는 익명 함수입니다.

익명 함수가 어떻게 호출되는지 살펴보세요.

1. 실행 후 반환 값을 가져오는 함수 호출

//方式一,调用函数,得到返回值。强制运算符使函数调用执行 
(function(x,y){ 
alert(x+y); 
return x+y; 
}(3,4)); 
//方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用在去调用执行 
(function(x,y){ 
alert(x+y); 
return x+y; 
})(3,4);

2. 실행 후 반환 값 무시

//方式三,调用函数,忽略返回值 
void function(x) { 
x = x-1; 
alert(x); 
}(9);

자, 결국 잘못된 호출 방법을 살펴보세요

//错误的调用方式 
function(x,y){ 
alert(x+y); 
return x+y; 
}(3,4);

위 내용은 자바스크립트 함수 리터럴과 Function() 생성자의 차이점에 대한 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.