Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重置Chrome开发工具控制台的方法';语境_Javascript_Ecmascript 6_Google Chrome Devtools - Fatal编程技术网

Javascript 重置Chrome开发工具控制台的方法';语境

Javascript 重置Chrome开发工具控制台的方法';语境,javascript,ecmascript-6,google-chrome-devtools,Javascript,Ecmascript 6,Google Chrome Devtools,Chrome>DevTools>console中是否有任何功能可以清除/重置/删除通过它进行测试时声明的变量和函数(就像调用clear一样,清除日志) 比如说,我用Let keyoword声明了一个变量 let str = "Hello"; ..我通过控制台运行了一次,然后再次通过控制台运行相同的代码 是的,它会像预期的那样抛出一个错误“标识符'str'已经声明”,因为变量已经声明,不能再次声明(不像用var关键字声明),所以要通过控制台重新运行代码,我必须刷新重置帧/目标上下文的页面 还有其

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

比如说,我用Let keyoword声明了一个变量

let str = "Hello";
..我通过控制台运行了一次,然后再次通过控制台运行相同的代码

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

还有其他选择吗

在开发人员控制台中声明任何变量或函数时所影响的是
global
执行上下文,对于web浏览器,它是
窗口

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


如果不想逐个手动清除所有变量,可以将它们存储到
对象
null
对象中,而不是像这样存储到单个变量中:



示例:


let data={};
data.str=“生命、宇宙和万物的答案”;
data.int=42;
log(data.str,data.int);
设置超时(()=>{
console.clear();
数据=空;
log(data.str,data.int);

}, 2000);正如注释中已经提到的,代码是在全局范围内计算的,因此除了重新加载当前窗口外,无法取消将使用
let
等声明为全局变量的变量声明

评估

let str = "Hello";
连续将始终触发
标识符“str”已声明的错误

一种解决方法是将代码作为完整的块范围代码段进行评估:

{
  let str = "Hello";
  console.log(str);
}
请注意,块没有返回值(它们是语句而不是表达式),但块中的最后一个表达式由console处理,因此可以省略
console.log

{ let str = "Hello"; str }
将在控制台中输出
Hello

或者,IIFE可用于返回值:

(() => {
  let str = "Hello";
  return str;
})()
根据经验,尽量避免在控制台中使用块作用域声明来避免此问题。此代码段可以连续无问题地进行计算:

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

基本上你有两个选择:

  • 简单的方法是:在控制台中执行
    window.location.reload()
  • 您可以使用或模式
  • block scope
    IIFE
    将要做的是不会像您那样在全局范围内声明变量。相反,它将在该范围内声明这些变量,与let
    不同,
    允许您重新声明它。

    这非常简单:

  • 打开浏览器窗口
  • 打开开发工具(F12)
  • 分离开发工具
  • 指定一个变量(全局变量),如
  • 要清除变量:只需在控制台中键入:
    location.reload(true)
  • 如果愿意,请重新指定相同的变量

  • 自2012年11月6日起添加了一个
    console.clear()
    函数。可能重复的变量不能重新声明或取消声明,并且控制台代码在全局范围内运行。重置的唯一方法是
    window.location.reload()
    @jeetaz,然后将其放入块范围内,以便
    const
    变量保持本地。@jeetaz因为
    delete x
    delete object
    而连续工作。这是真的。我喜欢有回报的生活。将其标记为答案。但如果您认为是另一种方式,例如,不允许重写使用let关键字声明的全局作用域函数,并通过控制台连续执行此操作,这就是通常通过控制台对其进行测试的方式。重写使用let关键字声明的全局作用域函数-通常您不希望故意使用
    let
    创建全局函数,这正是因为它与
    var
    不同的方式(不能重新声明,在
    窗口中未定义)。这可能是ES6中唯一可以接受
    var
    的情况。这清理了控制台的全局范围,但实际上必须从控制台运行,而不是进入代码段
    (() => {
      let str = "Hello";
      return str;
    })()
    
      var str = "Hello"; // instead of `let str = "Hello"`
      var Foo = class Foo {} // instead of `class Foo {}`
    
    let options = {
      title: "Menu",
      width: 100,
      height: 200
    };
    
    let options = {
      title: "Menu",
      width: 100,
      height: 200
    };