【问题标题】:A way to reset Chrome DevTools console's context一种重置 Chrome DevTools 控制台上下文的方法
【发布时间】:2018-12-13 23:08:57
【问题描述】:

Chrome > DevTools > 控制台中是否有任何功能可以清除/重置/删除在通过它进行测试时声明的变量和函数(就像调用 clear、清除日志一样)?

比如说,我有一个用 let keyoword 声明的变量..

let str = "Hello";

..我通过控制台运行一次,然后再次通过控制台重新运行相同的代码。

是的,它会按预期抛出错误“标识符'str'已经被声明”,因为变量已经被声明并且不能再次声明(不像用 var 关键字声明它)所以重新运行通过控制台代码,我必须刷新重置框架/目标上下文的页面。

还有其他选择吗?

【问题讨论】:

  • 自 2012 年 11 月 6 日起添加了一个 console.clear() 函数。
  • 不能重新声明或取消声明变量,控制台代码在全局范围内运行。进行重置的唯一方法是window.location.reload()
  • @jeetaz 然后把它放在一个块作用域内,这样你的constlet 变量就保持在本地。
  • @jeetaz 因为a subtle difference

标签: javascript ecmascript-6 google-chrome-devtools


【解决方案1】:

这很简单:

  1. 打开浏览器窗口
  2. 打开开发工具 (F12)
  3. 分离开发工具
  4. 分配一个变量(全局变量),如
let options = {
  title: "Menu",
  width: 100,
  height: 200
};
  1. 清除变量:只需在控制台中输入:location.reload(true);
  2. 如果愿意,可以再次分配相同的变量
let options = {
  title: "Menu",
  width: 100,
  height: 200
};

【讨论】:

    【解决方案2】:

    基本上你有两个选择:

    1. 最简单的方法:在控制台中执行window.location.reload()
    2. 您可以使用Block scopeIIFE 模式。

    block scopeIIFE 将不会像您之前那样在全局范围内声明变量。相反,它将在该范围内声明这些变量。 另外,与 let 不同,var 允许您重新声明它。

    【讨论】:

    • 这会清理控制台的全局范围,但确实必须从中运行而不是进入 sn-p
    【解决方案3】:

    正如在 cmets 中已经提到的那样,代码是在全局范围内评估的,因此除了重新加载当前窗口之外,没有办法将使用 let 等声明的变量取消声明为全局变量。

    评估

    let str = "Hello";
    

    连续总是会触发Identifier 'str' has already been declared错误。

    一种解决方法是将代码评估为完整的块范围的 sn-ps:

    {
      let str = "Hello";
      console.log(str);
    }
    

    请注意,块没有返回值(它们是语句而不是表达式),但块中的最后一个表达式由控制台处理,因此可以省略 console.log

    { let str = "Hello"; str }
    

    将在控制台中输出Hello

    另外,IIFE 也可以用来返回一个值:

    (() => {
      let str = "Hello";
      return str;
    })()
    

    根据经验,请尽量避免在控制台中使用块范围声明来避免此问题。这个 sn-p 可以连续评估没有问题:

      var str = "Hello"; // instead of `let str = "Hello"`
      var Foo = class Foo {} // instead of `class Foo {}`
    

    【讨论】:

    • var 连续工作,这是真的。我喜欢带返回值的 IIFE 的想法。将其标记为答案。但是,如果您认为这是另一种方式,例如,覆盖使用 let 关键字声明的全局作用域函数并通过控制台连续这样做是不允许的,这就是通常通过控制台对其进行测试的方式。
    • 覆盖用 let 关键字声明的全局作用域函数 - 通常你永远不想故意用let 创建一个全局函数,这正是因为它与var 的不同之处(不能重新声明,未在window 上定义)。这可能是var 在 ES6 中被认为是可接受的唯一情况。
    【解决方案4】:

    在开发者控制台中声明任何变量或函数时,您所影响的是 global 执行上下文,对于 Web 浏览器来说是 window

    使用console.clear() 会清除控制台内的可见历史记录,但不会删除任何变量定义。


    let x = 'Hey';
    x = null;
    x; // Undefined
    

    如果您不想一个一个地手动清除它们,您可以将它们存储到 objectnull 对象中,而不是像这样的单个变量:


    let object  = {};
    object.name = "Alan";
    object.age  = 26;
    object = null;
    object.name; // Undefined
    object.age;  // Undefined
    


    示例:

    let data = {};
    data.str = "Answer to life, universe and everything is";
    data.int = 42;
    
    console.log(data.str, data.int);
    
    setTimeout(() => {
      console.clear();
      data = null;
      console.log(data.str, data.int);
    }, 2000);


    引用自:Chrome console clear assignment and variables

    【讨论】:

    猜你喜欢
    • 2019-07-14
    • 2013-05-23
    • 2022-10-25
    • 1970-01-01
    • 2013-03-27
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多