>웹 프론트엔드 >JS 튜토리얼 >JS 특수함수(Function() 생성자, 함수 리터럴) 차이점 소개_기본지식

JS 특수함수(Function() 생성자, 함수 리터럴) 차이점 소개_기본지식

WBOY
WBOY원래의
2016-05-16 17:33:351188검색
함수 정의
함수는 키워드 함수, 함수 이름, 매개변수 집합, 괄호 안에 실행될 코드 등의 방식으로 선언됩니다.
함수 구성 구문에는 세 가지 유형이 있습니다.
Js 코드
코드 복사 코드는 다음과 같습니다.

1.function functionName(arg0, arg1, ... argN) { 문 }//function 문
2.var function_name = new Function(arg1, arg2, ..., argN , function_body); //Function() 생성자
3.var func = function(arg0, arg1, ... argN) { 명령문 };//함수 직접 수량

예:
Js 코드
코드 복사 코드는 다음과 같습니다.

1.function f( x){return x* x};//함수 명령문
2.var f = new Function("x","return x*x;");//Function() 생성자
3.var f = function(x) {return x*x;};//함수 리터럴

함수에 명확한 반환 값이 없거나 매개 변수 없이 return 문을 호출하는 경우 실제로 반환되는 값은 다음과 같습니다. 한정되지 않은.

Function() 생성자
Function은 실제로 완전한 기능을 갖춘 객체입니다. Function 클래스는 개발자가 정의한 모든 함수를 나타낼 수 있습니다. Function 클래스를 사용하여 직접 함수를 생성하는 구문은 다음과 같습니다.
var function_name = new function(arg1, arg2, ..., argN, function_body)
위 형식에서 각 arg는 매개변수이고, 그리고 마지막 인수는 함수의 본문(실행할 코드)입니다. 이러한 매개변수는 문자열이어야 합니다.
var sayHi = new Function("sName", "sMessage", "alert('Hello 'sName sMessage);")
sayHi("jzj,", "Hello!");//Hello jzj , 안녕하세요!
함수 이름은 단지 함수를 가리키는 변수일 뿐인데, 그 함수를 다른 함수에 매개변수로 전달할 수 있나요? 대답은 '예'입니다.
Js 코드
코드 복사 코드는 다음과 같습니다.

function callAnotherFunc(fnFunction, vArgument) {
fnFunction(vArgument);
}
var doAdd = new Function("iNum", "alert(iNum 10)")
callAnotherFunc (doAdd, 10); //Output "20"

참고: Function 생성자를 사용하여 함수를 생성할 수 있지만 함수를 정의하는 것이 훨씬 느리기 때문에 사용하지 않는 것이 가장 좋습니다. 전통적인 방법을 사용합니다. 그러나 모든 함수는 Function 클래스의 인스턴스로 간주되어야 합니다.
정의한 함수에 매개변수가 없으면 문자열(즉, 함수 본문)을 생성자에 전달하면 됩니다.
참고: 생성자 Function()에 전달된 매개변수 중 어느 것도 생성 중인 함수의 이름을 지정하지 않습니다. Function() 생성자로 생성된 이름 없는 함수를 "익명 함수"라고도 합니다.
Function() 함수를 사용하면 함수 문의 미리 컴파일된 함수 본문으로 제한하지 않고 함수를 동적으로 빌드하고 컴파일할 수 있습니다.
함수 리터럴
함수 리터럴은 익명 함수를 정의할 수 있는 표현식입니다. 함수 리터럴의 구문은 명령문이 아닌 표현식으로 사용된다는 점과 함수 이름을 지정할 필요가 없다는 점을 제외하면 함수 문의 구문과 매우 유사합니다. 구문:
Js 코드
코드 복사 코드는 다음과 같습니다.

var func = function( arg0, arg1, ... argN) { 문 };//함수 리터럴

함수 리터럴은 이름이 지정되지 않은 함수를 생성하지만 해당 구문에서는 함수 이름을 지정할 수도 있다고 규정합니다. 자신을 호출하는 재귀 함수를 작성할 때 매우 유용합니다. 예를 들어
Js 코드
코드 복사 코드는 다음과 같습니다. :

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

참고: 실제로는fact()라는 함수를 생성하지 않으며, 함수 본문이 이를 참조하도록 허용합니다. 이름. 1.5 이전 버전의 JavaScript에서는 이 명명된 함수 리터럴을 올바르게 구현하지 않았습니다. Js 코드


코드 복사
코드는 다음과 같습니다.

함수 square(x){return x*x;}
var a = square;
var b = a(5);//b는 25

이것은 C의 함수 포인터와 약간 비슷합니다.
Function() 생성자와 함수 리터럴의 차이점
Function() 생성자와 함수 리터럴의 차이점은 생성자 Function()을 사용하여 생성된 함수는 Lexical 범위를 사용하지 않는다는 점입니다. 반대로, 항상
Js 코드
코드 복사 코드와 같은 최상위 함수로 컴파일됩니다.

var y = "global";
function constructionFunction() {
var y = "local"
//Function() 생성자
return new Function( "return y;");//로컬 범위를 사용하지 마세요
}
function constFunction() {
var y = "local";//함수 리터럴
var f = function () {
return y;//로컬 범위 사용
};
return f;
}
//Function() 생성자가 반환하므로 전역을 표시합니다. 함수는 로컬을 사용하지 않습니다. range
alert(constructFunction()());
//함수가 함수를 직접 반환하고 로컬 범위를 사용하기 때문에 전역 표시
alert(constFunction()())

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