Crockford的实体化方法 - 为什么关闭?

mr_*_*r_c 9 javascript

在Crockford的JavaScript:The Good Parts的第90页,他的代码有以下内容:

String.method('entityify', function(){

  var character = {
    '<': '&lt;',
    '>': '&gt;',
    '&': '&amp;',
    '"': '&quot;'
  };

  return function(){
    return this.replace(/[<>&"]/g, function(c){
      return character[c];
    });
  };
}());

console.log("<&>".entityify());
Run Code Online (Sandbox Code Playgroud)

是否有充分的理由关闭并立即调用外部函数?以下似乎也适用:

String.method('entityify', function(){

  var character = {
    '<': '&lt;',
    '>': '&gt;',
    '&': '&amp;',
    '"': '&quot;'
  };

  return this.replace(/[<>&"]/g, function(c){
    return character[c];
  });
});
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 9

通过这样做,他创造了一次character对象并重新使用它.通过编辑,您每次都可以重新创建它.你可以用任何一种方式来论证,但这就是区别.他的使用略高于内存.你需要分数每次通话较长(也许,取决于是否创建该对象不是额外的范围遍历步骤的他已经花费更长的时间,它可能确实,虽然).在任何情况下,它都不可能是你在现实世界中注意到的任何东西.