JavaScript 템플릿의 소스 코드를 살펴보면 함수를 생성하는 흥미로운 사용법이 있음을 알았습니다. 이 메타 프로 그램이 아닌가?
JavaScript Metaprogramming
코드 사본은 다음과 같습니다.
Metaprogramming은 다른 프로그램 (또는 자체)을 데이터로 작성하거나 조작하는 특정 유형의 컴퓨터 프로그램을 작성하거나 런타임에 컴파일 시간에 완료 해야하는 일부 작업을 완료합니다.
자바 스크립트 평가
코드 사본은 다음과 같습니다.
Eval () 함수는 문자열을 계산하고 JavaScript 코드를 실행합니다.
다음과 같은 사용법이있을 수 있습니다.
코드 사본은 다음과 같습니다.
평가 ( "x = 10; y = 20; document.write (x*y)")
물론 이것은 특정 기능을 실행하는 데 사용되지만이 제품은 저렴하고 실수가 쉽습니다.
코드 사본은 다음과 같습니다.
평가 함수는 가능한 한 많이 피해야합니다.
그래서 더 좋은 방법은 새로운 기능을 사용하는 것입니다 ()
new function ()과 valit ()를 사용하는 것의 큰 차이점은 평가가 단순한 함수가 아니라는 것입니다.
코드 사본은 다음과 같습니다.
Eval ()는 현재 실행 범위 내에서 JavaScript 표현식으로 문자열을 계산하여 로컬 변수에 액세스 할 수 있습니다. 새 함수 () parses javaScript 코드는 함수 객체로 변환 된 문자열에 저장된 다음 호출 할 수 있습니다. 코드는 별도의 범위로 실행되므로 로컬 변수에 액세스 할 수 없습니다.
다시 말해, Eval ()는 현재 함수의 범위를 방해합니다. .
자바 스크립트 새 기능 ()
함수 생성자는 새 기능 객체를 만듭니다. JavaScript에서 각 함수는 실제로 기능 객체입니다. 함수 생성자를 사용하여 생성 된 기능 객체는 함수가 생성 될 때 구문 분석됩니다. 기능 선언을 사용하고 코드에서 호출하는 것보다 효율적이지 않습니다.
새로운 기능 ()은 비교할 때 비효율적이며 현재 상황에서 예측할 수있는 것입니다.
간단한 예는 다음과 같습니다.
코드 사본은 다음과 같습니다.
var add = new 함수 ([ 'x', 'y'], 'return x + y');
새로운 함수 () 문자열을 함수로 구문 분석합니다. . 그런 다음 적용하여 실행할 수 있습니다
코드 사본은 다음과 같습니다.
function.Apply (null, args)
그리고 이것이 JavaScript 템플릿에서 본 것입니다.
코드 사본은 다음과 같습니다.
새로운 기능 (
tmpl.arg + ', tmpl',
"var _e = tmpl.encode" + tmpl.helper + ", _s = '" +
str.replace (tmpl.regexp, tmpl.func) +
" '; return _s;"
);
물론 우리는 다른 방법이 있습니다.