我正在学习JavaScript并且已经在Chrome控制台中进行了大量测试.即使我清除控制台,或者使用我在其他线程中看到的任何命令(localStorage.clear()),我指定的任何变量仍会显示出来.
例如,如果我做了类似的事情 localStorage.clear()
我清理并关闭控制台,重新打开它,然后寻找var name = "Bob";
它的价值,它仍然存在name
.
清除这些的最佳方法是什么?
在开发人员控制台中声明任何变量或函数时,您所影响的是全局执行上下文,对于Web浏览器而言window
.
在您clear()
使用控制台时,您告诉Chrome删除这些操作的所有可见历史记录,而不是清除您附加到的对象window
.
要执行此操作,您必须delete
通过其引用手动操作每个对象:
delete name; name //=> undefined
如果有通过重复地移动多个对象的开销delete
实在是太多了,每个值存储为一个对象的属性,例如data
,你可以在一个声明中的所有属性删除一起:
var data = {}; data.name = 'Bob'; data.age = 60; delete data; data.name //=> ReferenceError: data is not defined data.age //=> ReferenceError: data is not defined
解决此问题的一个简单方法是在快速调用的函数表达式(IIFE)中将您不想要的任何代码包装在全局作用域中.当函数结束时,函数范围中分配的所有变量都将被释放:
(function() { // Put your code here... })();
有关IIFE的更多信息:https://en.wikipedia.org/wiki/Immediately-invoked_function_expression
[更新]
在ES6中,您可以使用块(只要您使用块let
代替var
):
{ // Put your code here... }
有关块的更多信息:http://exploringjs.com/es6/ch_core-features.html#sec_from-iifes-to-blocks
清除控制台不会清除内存中的变量,而只是清除用户界面中的数据.
重新加载页面会清除控制台数据.我希望你应该没问题,因为你提到你只是在测试和学习javascript.
希望有所帮助!
chrome开发人员工具发生了很多变化。delete name
没有帮助;
//for example if you have declared a variable `const x = 2;` //Now sometime later you want to use the same variable `const x = 5` you will get an error //if you try to delete it you will get false delete x;
但是在控制台仍处于打开状态时会重新加载页面。将刷新控制台上下文,现在x不可用,您可以重新定义它。希望这可以帮助某人在chrome控制台上测试或尝试操作。我经常使用它。