이전 단어
그들의 존재가 실수 인 것처럼 평가와 함께 종종 싫어합니다. CSS에서는 테이블이 싫어되며 테이블 만 사용하여 레이아웃이 아닌 웹 페이지에 데이터를 표시하는 것이 불규칙하고 과도하게 거부 될 수 있습니다. 그렇다면 Eval and with에 대한 상황은 무엇입니까? 이 기사는 eval () 함수를 소개하고 명령문이 자세히 설명합니다.
평가
정의
Eval ()는 글로벌 기능입니다. JavaScript는 Eval ()을 사용하여 JavaScript 소스 코드로 구성된 실행중인 문자열을 설명합니다.
var result = eval ( '3+2'); console.log (result, typeof result); // 5 '숫자'
용법
Eval ()에는 하나의 매개 변수 만 있습니다. 전달 된 매개 변수가 문자열이 아닌 경우이 매개 변수를 직접 반환합니다. 매개 변수가 문자열 인 경우 문자열을 JavaScript 코드로 컴파일합니다. 컴파일이 실패하면 구문 오류 (SyntaxError) 예외가 발생합니다. 컴파일이 성공하면 코드가 실행되고 문자열의 마지막 표현식 또는 문의 값이 반환되며 마지막 표현식 또는 문에 값이 없으면 결국 정의되지 않은 반환됩니다. 문자열이 예외를 던지면 예외는 호출을 Eval ()로 전달합니다.
var num = 1; var str = 'test'; console.log (Eval (num)); // 1console.log (Eval (str)); // referenceError : test는 var strlong1 = 'var x = 1; var y = 2;'; console.log (Eval (strlong1), x, y); // var x = 1; x ++; '; console.log (Eval (strlong2), x); // 1 2
범위
Eval ()는이를 호출하는 가변 범위 환경을 사용합니다. 즉, 변수의 값을 찾고 로컬 범위에서 새로운 변수와 함수의 작동을 정의합니다.
var b = 2; function foo (str, a) {eval (str); console.log (a, b);} foo ( 'var b = 3;', 1); // 1 3별명
별칭을 통해 호출되면 Eval ()은 문자열을 최상위 글로벌 코드로 실행합니다. 실행 된 코드는 새로운 글로벌 변수 및 글로벌 함수를 정의하거나 전역 변수에 값을 할당 할 수 있지만 함수의 로컬 변수를 사용하거나 수정할 수는 없습니다.
var geval = 평가; var x = 'global', y = 'global'; 함수 f () {var x = 'local'; eval ( 'x += "변경";';[참고] IE8- 브라우저는 별칭을 통해 Eval ()을 호출하고 일반적으로 동일한 결과를 eval ()를 호출합니다.
부작용
JavaScript 통역사는 많은 코드 분석 및 최적화를 수행합니다. Eval ()의 문제점은 동적 실행에 사용되는 코드가 일반적으로 분석되지 않으므로 통역사가 최적화 할 수 없으므로 성능 저하로 이어질 수 있습니다.
eval ()과 유사하게 settimeout (), setinterval (), new function () 등입니다.이 함수는 문자열을 매개 변수로 사용하여 프로그램을 실행할 때 동적으로 실행될 수 있습니다. 이 실행 메커니즘의 이점은 성능 손실을 상쇄 할 수 없으므로 사용하지 않도록해야합니다.
엄격한 모드
Eval () 함수가 너무 강력하기 때문에 엄격한 모드는 엄격하게 제한됩니다.
rat eval () 함수를 통해 변수 또는 함수를 생성 할 수 없지만 값을 쿼리하고 변경할 수 있습니다.
'strict'; evat ( 'var x = 1;'); console.log (x); // referenceError : x는 'strict'; var x = 1; eval ( 'x = 2;'); console.log (x); // 2
【2 able 평가자로 평가를 사용할 수 없습니다
'엄격한 사용'; var eval = 10; // syntaxerror : 예기치 않은 평가 또는 엄격한 모드에서 인수
~와 함께
진술로 정의하는 목적은 동일한 객체를 여러 번 쓰는 작업을 단순화하는 것입니다.
with 문은 스코프 체인의 헤드에 객체를 추가 한 다음 문을 실행하고 마지막으로 스코프 체인을 원래 상태로 복원합니다.
with (object) {stater;}효과
객체 중첩 레벨이 깊을 때, 진술은 일반적으로 코드 쓰기를 단순화하는 데 사용됩니다. 본질적으로, 객체의 참조를 범위로 처리하고 객체의 속성을 범위의 식별자로 사용하여 새로운 어휘 스코프를 생성하여 처리됩니다.
클라이언트 JavaScript에서 다음과 같은 표현식은 HTML 형식의 요소에 액세스하는 데 사용될 수 있습니다.
document.forms [0] .address.value
코드에 그러한 표현이 여러 번 나타나면 with 명령문을 사용하여 스코프 체인의 최상위 레벨에 양식 개체를 추가 할 수 있습니다.
with (document.forms [0]) {name.value = ''; address.value = ''; emai.value = '';}이 메소드는 각 속성 이름에 대해 문서를 접두사하지 않고도 많은 입력을 줄입니다. 이 객체는 일시적으로 스코프 체인에 장착됩니다. JavaScript가 주소와 같은 식별자를 구문 분석 해야하는 경우이 개체에서 자동으로 검색됩니다.
[참고] With Statement는 객체의 속성을 읽는 바로 가기를 제공하지만 객체의 속성을 생성 할 수는 없습니다.
Object O가 속성 x가있는 경우 다음 코드는 속성 값을 1에 할당합니다.
var o = {x : 0}; (o) x = 1; console.log (ox); // 1속성 x가 O에 정의되지 않으면 다음 코드는 with 문을 사용하지 않는 코드 x = 1과 정확히 동일합니다. LHS 쿼리가 변수 x에서 수행되고 1이 할당되기 때문입니다.
var o = {};부작용
평가와 마찬가지로, with 문의 JavaScript 코드는 최적화하기가 매우 어렵고 코드를 디버깅하는 데 어려움이 있습니다. with 명령문을 사용하지 않는 코드보다 느립니다.
또한, 명령문이 부적절한 경우 가변 누출을 일으키고 전역 범위를 오염시킬 수 있습니다.
var x = 1; var o = {};엄격한 모드
엄격한 모드에서는 진술의 사용은 금지됩니다.
// syntaxError : Strict Mode Code는 with State 'strict'; var o = {}; with (o) {x = 2;}를 포함하지 않을 수 있습니다.마침내
Eval을 사용하고 엔진이 컴파일 시간에 스코프 조회를 최적화 할 수 없으므로 성능 저하 및 코드가 느리게 진행됩니다. 실제 작업에서는 Eval 및 With가 거의 사용되지 않기 때문에 엄격한 모드의 제한은 우리에게 거의 영향을 미치지 않습니다. 외무부가 언젠가 우리나라가 더 이상 자메이카 비자를 발행하지 않을 것이라는 발표를 발표 한 것처럼. 우리는 자메이카에 대해 들어 보았지만 대부분의 사람들은 자신의 삶에서 한 번 그곳에 가지 않기 때문에 중요하지 않습니다. 마찬가지로 Eval과 With가 싫어하는지 여부는 중요하지 않습니다.
위의 내용은 귀하에게 소개 된 편집자가 멸시 된 Eval 기능과 진술 예제라는 JavaScript 학습 요약에 대한 자세한 설명입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!