Javascript:调用时删除函数是否安全?

标签 javascript

我只想允许调用 digest 方法一次,因此当计算完摘要后,函数将被删除,并且 that 是一个没有函数的简单对象。

var Content = function(filename) {
  var that = {};
  var name = path.basename(filename);

  var digest = function(callback) {
    fs.readFile(filename, function(err, data) {
      that.hash = crypto.createHash('sha1').update(data).digest('hex');
      delete that.digest; // IS THIS SAFE?
      callback();
    });
  };

  that.digest = digest;
  that.name = name;

  return that;
};

使用它:

var content = Content('/path/to/file');
content.digest(function() {
  // content.hash is available
});

这是安全且良好的做法吗?

最佳答案

是的,它是安全的,因为删除只是删除该引用,它不会释放任何内存,因此您的函数仍然存在:

Unlike what common beliefs suggests, the delete operator has nothing to do with directly freeing memory (it only does indirectly via breaking references.

这是一个好的做法吗?好吧,这只是我的意见...我认为当您阅读该代码时并不太清楚(您需要阅读全部内容才能了解发生了什么),所以我会避免它而选择其他东西(如果您使用某种例如,对于延迟初始化,您可以使用另一个属性)。也就是说,在代码中添加适当的注释...

关于Javascript:调用时删除函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264296/

相关文章:

javascript - 如何创建一个 jQuery 函数来切换暗模式?

javascript - 增加 d3 属性的最佳方法

javascript - AngularJS自定义指令在继承父范围的同时访问模板中的属性

javascript - 使用带 Angular Bootstrap 日期选择器

javascript - 当可拖动元素旋转时,可拖动遏制错误

javascript - window.location.hash 不会在 IE 的 iframe 中提醒

javascript - 将过时的JavaScript库与更新的TypeScript集成

javascript - 我们可以使用其他域的 localStorage 的值吗?

Javascript异步赋值和回调

javascript - 突出显示时如何缩进代码使用 highlight.js