javascript - 为什么全局变量不能删除?

标签 javascript

为什么正确声明的全局变量无法删除?

我不知道这是否适用于所有程序语言,但我知道在 JavaScript 中它无法删除。

来源:Javascript 权威指南 O'Reilly。

最佳答案

当您使用全局变量并且希望能够删除它们时,您应该轻松地在全局对象中定义它们,而无需在语句中使用 var,例如:

假设您想在代码中定义一个全局变量,并且您需要能够随时删除它们,所以如果您这样做:

function myfunc(){
    var name = "Robert";
    console.log(delete name);
}

并在控制台中调用它,您将得到 false 作为删除语句的结果,这意味着它尚未被删除,但如果您这样做:

function myfunc(){
    var obj = {};
    obj.name = "Robert";
    console.log(delete obj.name);
}

那么你的结果就是 true,这意味着它现在被删除了。

现在对于全局对象,如果您像这样创建它:

window.myobj = {};

然后你可以删除它,它实际上被删除了:

delete window.myobj;

delete window["myobj"];

问题是,当您在窗口上下文中使用 var 创建变量时,尽管它位于窗口中的对象上,但它不会被删除,例如,如果您这样做:

var myobj = {};

在浏览器开发控制台中,它在窗口中定义,您可以像这样:

window.myobj

但你不能删除它,因为你已经在 var 语句中定义了它。

但如果您确实希望将其从内存中删除,请不要忘记将其设置为null:

window["myobj"] = null;
delete window["myobj"];

关于javascript - 为什么全局变量不能删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21965380/

相关文章:

javascript - 错误: read ECONNRESET when connected to a mysql server with Node.js

javascript - 由于严格模式,我的 React 组件渲染了两次

javascript - 其他脚本中的封装函数应该放在哪里?

javascript - 如何更新嵌套状态对象的键/值(React JS)

javascript - 向 http 请求添加事件监听器 (request.on) 意味着什么?它有什么用?

javascript - Javascript 中哪些类型的 block 会创建闭包

javascript - 在 Canvas 上仅显示几分之一秒的字符串

javascript - 像按钮一样 react 切换

javascript - 在特定字段事件上调用 NetSuite 中的验证字段函数

javascript - 为什么数字数组,更多数据排序比对象数组更快,Javascript中的数据更少?