> 웹 프론트엔드 > JS 튜토리얼 > eval과 window.eval_javascript 기술의 차이점 분석

eval과 window.eval_javascript 기술의 차이점 분석

WBOY
풀어 주다: 2016-05-16 18:09:08
원래의
1174명이 탐색했습니다.
그들 사이에 차이점이 있나요?

개발 과정에서 불필요한 창을 추가하는 사람은 거의 없는 것 같습니다. 예를 들어 Ajax 프로세스의 콜백 함수는 JSON 형식 문자열
코드 복사를 구문 분석합니다. 코드는 다음과 같습니다.

..
함수 콜백(str){
var json = eval('(' str ')')
}
...

보통 var json = window.eval('(' str ')')이 아닌 직접 eval을 사용합니다.
예를 들어 디버깅할 때 경고를 사용하고, window.alert 이벤트를 사용하는 사람은 거의 없습니다. IE에서 이벤트 객체를 얻으며 window.event를 사용하는 사람은 거의 없습니다. (Firefox도 이벤트를 지원하지만 window.event는 지원하지 않는 경우도 있습니다. 관심 있는 학생은 이 글을 읽고 이벤트 객체를 얻을 수 있습니다.)

그러나 각 엔진 구현의 차이로 인해 여전히 차이점이 있습니다. . 의.
코드 복사 코드는 다음과 같습니다.

var x = 5; fn() {
var x = 'jack';
eval('x=10;')
fn()
alert(x); >5


모든 브라우저의 출력은 5입니다. 이는 fn을 호출한 후 eval이 전역 x가 아닌 fn의 로컬 변수 x를 수정한다는 의미입니다. 즉, eval에 의해 실행되는 클로저 환경은 fn 내에 있습니다.

위 코드의 eval을 window.eval로 수정하고 교체한 결과, 테스트 결과 브라우저마다 성능이 다른 것을 확인했습니다.

IE6/7/8: 여전히 5를 출력합니다. 즉, 전역 변수 x는 수정되지 않았지만 지역 변수 x는 여전히 수정되었습니다.
IE9/Firefox/Safari/Chrome/Opera: 출력 10, 전역 변수 x가 수정되었습니다.

결론을 내릴 수 있습니다
IE6/7/8에서 eval은 window.eval과 동일합니다. 사용자 정의 함수로 작성하면 로컬 클로저이고, 그렇지 않으면 전역 클로저입니다.
IE9/Firefox/Safari/Chrome/Opera에서 eval은 위의 IE6/7/8과 동일합니다. window.eval을 커스텀 함수로 작성하더라도 전역 클로저입니다.

또한 IE의 window.execScript는 항상 전역 폐쇄 하에서 실행되며 놀랍게도 Chrome도 이 방법을 지원합니다. 아, 크롬 정책은 기본이고 IE도 빠질 수 없죠.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿