>  기사  >  웹 프론트엔드  >  JavaScript_javascript 기술의 DSL 메타프로그래밍 소개

JavaScript_javascript 기술의 DSL 메타프로그래밍 소개

WBOY
WBOY원래의
2016-05-16 16:09:262105검색

JavaScript Template 소스 코드를 보다가 함수 생성에 대한 매우 흥미로운 사용법을 발견했습니다. 이것이 바로 메타 프로그래밍이 아닐까요?

자바스크립트 메타프로그래밍

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

메타프로그래밍은 다른 프로그램(또는 그 자체)을 데이터로 작성 또는 조작하거나 컴파일 타임에 완료되어야 하는 일부 작업을 런타임에 완료하는 특정 유형의 컴퓨터 프로그램을 작성하는 것을 의미합니다.

자바스크립트 평가

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

eval() 함수는 문자열을 평가하고 그 안에 있는 JavaScript 코드를 실행합니다.

다음과 같이 사용할 수 있습니다:
코드 복사 코드는 다음과 같습니다.

eval("x=10;y=20;document.write(x*y)")

물론 이것은 특정 기능을 실행하는 데에만 사용되지만 이 제품은 비용 효율적이고 오류가 발생하기 쉽습니다.
코드 복사 코드는 다음과 같습니다.

eval 함수는 가능하면 피해야 합니다.

따라서 더 좋은 방법은 New Function()을 사용하는 것입니다.

New Function()과 eval()을 사용할 때의 가장 큰 차이점은 eval이 단순한 함수가 아니라는 점입니다.

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

eval()은 현재 실행 범위 내에서 문자열을 JavaScript 표현식으로 평가하고 지역 변수에 액세스할 수 있습니다. New Function()은 저장된 문자열을 JavaScript 코드에서 호출할 수 있는 함수 개체로 구문 분석합니다. 코드는 별도의 범위에서 실행되므로 지역 변수에 액세스할 수 없습니다.

즉, eval()은 현재 함수의 범위를 방해합니다. .

자바스크립트 새 함수()

Function 생성자는 새로운 Function 객체를 생성합니다. JavaScript에서 각 함수(함수)는 실제로 Function 생성자를 사용하여 생성된 Function 객체가 함수 생성 시 구문 분석됩니다. 함수 명령문을 사용하여 선언된 함수는 다른 명령문과 함께 구문 분석되므로 함수를 선언하고 코드에서 호출하는 것보다 효율성이 떨어집니다.

New Function()은 상대적으로 효율성이 떨어지며 이는 현재 상황에서 예측할 수 있는 것입니다.

간단한 예는 다음과 같습니다.

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

var add = new Function(['x', 'y'], 'return x y');

new Function()은 문자열을 함수로 구문 분석합니다. . 그런 다음 Apply를 통해 실행하면 됩니다
코드 복사 코드는 다음과 같습니다.

함수.적용(null, args)

JavaScript 템플릿에는 다음이 표시됩니다.
코드 복사 코드는 다음과 같습니다.

새로운 기능(
         tmpl.arg ',tmpl',
"var _e=tmpl.encode" tmpl.helper ",_s='"
        str.replace(tmpl.regexp, tmpl.func)
"';return _s;"
);

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