eval 과 window.eval 의 차이 분석

1451 단어 evalwindow.eval
그것들 사이 에는 차이 가 있 습 니까?개발 과정 에서 별도의 윈도 우 를 추가 하 는 사람 이 별로 없 는 것 같 아 쓸데없는 짓 이 라 고 생각한다.예 를 들 어 Ajax 과정 에서 리 셋 함수 해석 JSON 형식 문자열
 
...
function callback(str){
var json = eval('(' + str + ')');
}
...
var json=window.eval('('+str+')'이 아 닌 eval 을 직접 사용 합 니 다.또한 디 버 깅 할 때 alert 를 사용 하면 window.alert 를 사용 하 는 사람 이 별로 없다.IE 에서 이벤트 대상 을 가 져 오 려 면 이 벤트 를 사용 합 니 다.윈도 우즈 이 벤트 를 사용 하 는 사람 은 거의 없습니다.(Firefox 에 서 는 window.event 대신 이벤트 도 지원 합 니 다.관심 있 는 학생 들 은 이 사건 의 대상 을 얻 은 가족 을 보 세 요)그러나 각 엔진 의 차이 로 인해 그들의 차 이 는 여전히 있 습 니 다
 
var x = 5;
function fn(){
var x = 'jack';
eval('x=10;');
}
fn();
alert(x); // -->5
모든 브 라 우 저 에서 출력 한 것 은 5 입 니 다.fn 을 호출 한 후 eval 에서 fn 내 부분 변수 x 를 수정 한 것 이지 전체 x 가 아 닙 니 다.즉,eval 이 실행 하 는 패 킷 환경 은 fn 내 에 있 습 니 다.수정 하여 상기 코드 의 eval 을 window.eval 로 바 꾸 고 테스트 한 결과 각 브 라 우 저 에서 의 표현 이 다른 것 을 발견 하 였 습 니 다.IE6/7/8:전역 변수 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 는 항상 전체 패키지 에서 실 행 됩 니 다.놀랍게도 크롬 도 이 방법 을 지원 합 니 다.허,크롬 정책 은 표준 입 니 다.IE 하 나 는 빠 질 수 없습니다.

좋은 웹페이지 즐겨찾기