최근에 나는 performance guide Let's make the web faster을 읽었으며 "가변적 인 범위 지정이 동적 인 CommonLisp 사용자에게 주어진 것처럼 조언을 통해 함정 피하기"권장 사항에 의문을 표시했습니다.자바 스크립트 : 클로저 변수에 대한 액세스가 느릴 수있는 이유
f
가 호출 될 때
var a = 'a'; function createFunctionWithClosure() { var b = 'b'; return function() { var c = 'c'; a; b; c; }; } var f = createFunctionWithClosure(); f();
는
a
를 참조하면c
를 참조보다 느린b
를 참조보다 느립니다.
그것은 지역 변수를 C를 참조하면 B보다 더 빠르다는 것을 매우 분명,하지만 iterpreter이 제대로 작성된 경우 (동적 범위 지정하지 않고 - 체인 해시 테이블 조회 같은 ..) 속도 차이는해야한다 가장자리 가의. 안 그래요?
장수와 호기심에 대해 v5에서 어떻게 변화하는지 설명 할 수 있습니까? – Hogan
익명 함수 내에서'var d = eval ("this");'를 수행하면 범위 체인 룩업은 모든 컨텍스트를 크롤링하여 'a'참조를 얻습니다. 아니면 그냥'this'를'd '에 할당 할 것인가? – headacheCoder
@headacheCoder : 그 코드가 일종의 "oldish"브라우저에서 실행되면 매우 가능합니다. 그러나, 어쨌든 이런 끔찍한 진술은 절대로해서는 안됩니다. 최첨단 브라우저는'eval'을 사용하여 물건을 최적화 할 수있을 것이며 심지어 엄격 모드에서도 피해야 할 것입니다. 그러나 이러한 브라우저는 어쨌든 ES5 사양을 따릅니다. – jAndy