JavaScript는 array.length를 캐시하지 않습니다.
4013 단어 showdevjavascript
오해: array.length는 JavaScript 엔진에 의해 캐시됩니다.
JavaScript VM이 최적화를 위해 array.length를 캐시한다는 많은 댓글과 게시물을 보았습니다.
따라서 다음 코드는 필요하지 않습니다 ...
for(var i=0,n = a.length;i<n;i++) {
...
}
그리고 이것은 최신 컴파일러에 의해 자동으로 최적화됩니다.
for(var i=0;i<a.length;i++) {
...
}
이것은 신화입니다. 컴파일러는 최적화할 수 있지만 for 루프가 다른 메서드를 호출하지 않고 간단한 수학적 단계를 수행하는 경우에만 최적화할 수 있습니다.
위의 예에서,
function run(a, f) {
for(var i = 0; i < a.length; i++) {
f(a[i]);
}
}
var a = [0,1,2,3];
run(a, function(n) {
console.log(n);
if (n == 2) {
a.push(4);
a.push(5);
}
});
엔진이 캐시하는 경우 출력은 0,1,2,3
array.length
이어야 하지만, 눈치채셨다면 출력은 0,1,2,3,4,5
입니다.
즉, 모든 비교 전에 a.length
를 읽습니다.
최적화는 비용이 많이 듭니다
스크립트의 소스 수준 분석은 비용이 많이 드는 프로세스입니다. JavaScript 엔진이 캐시 여부를 결정하기 위해 복잡한 논리를 감지하는 데 시간을 할애하면 시작 시간이 느려집니다.
Reference
이 문제에 관하여(JavaScript는 array.length를 캐시하지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/akashkava/javascript-does-not-cache-array-length-2n65
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
for(var i=0,n = a.length;i<n;i++) {
...
}
for(var i=0;i<a.length;i++) {
...
}
function run(a, f) {
for(var i = 0; i < a.length; i++) {
f(a[i]);
}
}
var a = [0,1,2,3];
run(a, function(n) {
console.log(n);
if (n == 2) {
a.push(4);
a.push(5);
}
});
스크립트의 소스 수준 분석은 비용이 많이 드는 프로세스입니다. JavaScript 엔진이 캐시 여부를 결정하기 위해 복잡한 논리를 감지하는 데 시간을 할애하면 시작 시간이 느려집니다.
Reference
이 문제에 관하여(JavaScript는 array.length를 캐시하지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/akashkava/javascript-does-not-cache-array-length-2n65텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)