질문 Stringing.prototype 성능 확장 질문에 따라 메서드에 추가 "use strict"하는 것만으로 String.prototype성능이 10 배 향상 되었기 때문에 정말 흥미 롭습니다 . 설명 에 의해 BERGI은 짧고 나에게 그것을 설명하지 않습니다. 왜 거의 동일한 두 가지 방법 사이에 극적인 차이가 "use strict"있는가? 이것에 대한 이론과 더 자세하게 설명 할 수 있습니까?
String.prototype.count = function(char) {
var n = 0;
for (var i = 0; i < this.length; i++)
if (this[i] == char) n++;
return n;
};
String.prototype.count_strict = function(char) {
"use strict";
var n = 0;
for (var i = 0; i < this.length; i++)
if (this[i] == char) n++;
return n;
};
// Here is how I measued speed, using Node.js 6.1.0
var STR = '0110101110010110100111010011101010101111110001010110010101011101101010101010111111000';
var REP = 1e4;
console.time('proto');
for (var i = 0; i < REP; i++) STR.count('1');
console.timeEnd('proto');
console.time('proto-strict');
for (var i = 0; i < REP; i++) STR.count_strict('1');
console.timeEnd('proto-strict');
결과:
proto: 101 ms
proto-strict: 7.5 ms
this[i] === charDOM 환경에서 테스트 한 결과는 동일합니다.
bergi의 설명에 따르면
—
Nick Larsen
count함수 를 호출 할 때 this매개 변수는 문자열 리터럴 대신 문자열 객체로 캐스팅되어야하지만 엄격 모드에서는 올바르게 작동하기 위해 필요하지 않습니다. 이것이 사실이 아닌 이유, 나는 대답에 매우 관심이 있습니다.
@NickLarsen : 언어가 어떻게 지정되었는지입니다. 전통적으로 JS는 항상 객체를
this으로 유지했지만 엄격 모드에서는 해당 단계를 건너 뛰므로 기본 문자열 또는 제공된 모든 것을 얻습니다 this.
"use strict";소년들을 어디에나 둘 시간입니다 ! Goooold
this[i] === char하여 동일한 차이가 있는지 확인할 수 있습니까?