Warum verbessert "use strict" die Leistung in diesem Beispiel um das 10-fache?

Folgen Sie der FrageExtending String.prototype performance Ich bin wirklich fasziniert, weil nur das Hinzufügen von"use strict" zu einerString.prototype -Methode verbesserte die Leistung um das Zehnfache. DasErläuterun durch bergi ist kurz und erklärt es mir nicht. Warum gibt es so einen dramatischen Unterschied zwischen zwei fast identischen Methoden, die sich nur in @ unterscheide"use strict" oben? Kannst du das genauer und mit der Theorie dahinter erklären?

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');

Ergebnis

proto: 101 ms
proto-strict: 7.5 ms

Antworten auf die Frage(2)

Ihre Antwort auf die Frage