javascript - 删除这个在 JS 中有意义吗?

标签 javascript

我明白了:

var obj = {
  foo: 'bar'
};

delete obj.foo;

将键/值对 foo/'bar' 移除到 obj 对象。或者换句话说,它将对内容 'bar' 的引用释放到对象(意味着它将在某个时候被垃圾收集)。

我还可以写:

delete obj;

在幕后它是这样的:

delete window.obj;

离开 window 而不引用 obj

我不完全了解 this 关键字在 JS 中的工作原理,但我的观点是它是一个绑定(bind)到方法执行的对象。

但我不确定这样写是否有意义:

delete this;
  • 从哪个对象中删除了引用?
  • 如果我之后调用 return this; 会发生什么,它会是 null

特别是我想销毁一个用 new 构建的对象:

function MyClass() = {
  return this;
};

MyClass.prototype.destroy = function() {
  delete this;
};

var myInstance = new MyClass();
myInstance.destroy();

myInstance真的被删除了吗?是否释放了所有内存?

谢谢

最佳答案

Is myInstance really deleted? Is all the memory freed?

没有。 That's what delete never did.

From which object does the reference is removed?

事实并非如此。 this 关键字不是属性引用 - 它的工作方式很像文字。该构造与 delete 0 一样有意义。

同样,局部变量不是属性引用;在严格模式下,当您尝试 delete 它们时,您会得到一个异常。我想知道为什么 delete this 也没有抛出。

关于javascript - 删除这个在 JS 中有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41265874/

相关文章:

javascript - 使用 node.js 模块,在什么情况下模块会执行两次?

JavaScript - 有条件地调用一个函数

JavaScript JQuery 数组循环

javascript - JQuery:检查输入的值

javascript - Vue.js v-validate 从模型中获取值

javascript - 在 Rails 中发布表单时使用 HTML5 地理定位

javascript - Jquery退出Popup同时触发一个函数

javascript - SpiderMonkey 堆栈跟踪中的函数名称

javascript - 每个 Ajax 数据

javascript - 使用 Bower 优于 Git 子模块的好处