>  기사  >  웹 프론트엔드  >  자바스크립트 기본 튜토리얼의 표현식과 생성자에 대한 자세한 설명

자바스크립트 기본 튜토리얼의 표현식과 생성자에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-25 10:05:281374검색

함수 정의 표현식

 표현식 모드에서 정의된 함수, 함수 이름은 선택사항

var functionName = function([arg1 [,arg2 [...,argn]]]){
    statement;
}
var functionName = function funcName([arg1 [,arg2 [...,argn]]]){
    statement;
}

익명 함수(익명 함수), 람다 함수라고도 불리는데, 함수 키워드 뒤에 식별자가 없는 함수입니다

일반적으로 말하면 , 표현식으로 정의된 함수에는 이름이 필요하지 않으므로 해당 함수가 정의된 코드가 더 간결해집니다. 함수 정의 표현식은 한 번만 사용되는 함수를 정의하는 데 특히 적합합니다.

var tensquared = (function(x) {return x*x;}(10));

함수 정의 표현식에는 이름이 포함되므로 함수의 로컬 범위에는 함수 개체에 바인딩된 이름이 포함됩니다. 실제로 함수 이름은 함수 내에서 지역 변수가 됩니다.

var test = function fn(){
   return fn;
}
console.log(test);//fn(){return fn;}
console.log(test());//fn(){return fn;}
console.log(test()());//fn(){return fn;}

명명된 함수 표현식의 경우 함수 이름은 함수 개체의 형식 매개 변수와 동일하며 변수 이름은 함수 내에서만 사용할 수 있습니다. 실제 매개변수는 함수 내부와 외부 모두에서 사용할 수 있습니다.

var test = function fn(){   
  return fn === test;
}
console.log(test());//true
console.log(test === fn);//ReferenceError: fn is not defined

함수는 비표준 이름 속성을 정의합니다. 이 속성을 통해 해당 함수에서 지정한 이름에 액세스할 수 있습니다. 속성은 항상 function 키워드 뒤에 오는 값과 같습니다. 다음 식별자의 경우 익명 함수의 name 속성은 비어 있습니다.

//IE11-浏览器无效,均输出undefined
//chrome在处理匿名函数的name属性时有问题,会显示函数表达式的名字
function fn(){};
console.log(fn.name);//'fn'
var fn = function(){};
console.log(fn.name);//'',在chrome浏览器中会显示'fn'
var fn = function abc(){};
console.log(fn.name);//'abc'

Function constructor

Function 생성자는 여러 매개변수를 받지만 마지막 매개변수는 항상 다음과 같이 간주됩니다. 함수 본문 및 이전 매개변수가 열거됩니다. 새 함수의 매개변수

var functionName = new Function(['arg1' [,'arg2' [...,'argn']]],'statement;');

  [참고] 함수 생성자는 함수 이름을 지정할 수 없으며 익명 함수를 생성합니다

 기술적으로 이것은 함수 표현식입니다. 그러나 이 구문을 사용하면 코드가 두 번 구문 분석되므로 권장되지 않습니다. 첫 번째는 일반 자바스크립트 코드를 파싱하는 것이고, 두 번째는 생성자에 전달된 문자열을 파싱하는 것인데, 이는 성능에 영향을 줍니다

var sum = new Function('num1','num2','return num1 + num2');
//等价于
var sum = function(num1,num2){    
  return num1+num2;
}

 Function() 생성자로 생성된 함수의 경우 함수 본문의 컴파일은 항상 전역 범위에서 실행됩니다. 따라서 Function() 생성자는 전역 범위에서 실행되는 eval()과 유사합니다

var test = 0;
function fn(){
    var test = 1;
    return new Function('return test');
}
console.log(fn()());//0

 [참고] 모든 함수가 생성자가 될 수는 없습니다

var o = new Math.min();//Uncaught TypeError: Math.min is not a constructor

위 내용은 자바스크립트 기본 튜토리얼의 표현식과 생성자에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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