Почему «использование строгого» повышает производительность в 10 раз в этом примере?

После вопросаРасширение производительности String.prototype Я действительно заинтригован, потому что просто добавив"use strict" кString.prototype Метод улучшил производительность в 10 раз.объяснение отБерги является коротким и не объясняет это мне. Почему между двумя почти идентичными методами существует такое различие, которое отличается только"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

Ответы на вопрос(1)

Ваш ответ на вопрос