Способ сбросить контекст консоли Chrome DevTools

Есть ли какая-либо функция в консоли Chrome > DevTools >, которая очищает/сбрасывает/удаляет переменные и функции, объявленные при тестировании через нее (так же, как вызов очистки очищает журналы)?

Скажем, например, у меня есть переменная, объявленная с ключевым словом let..

let str = "Hello";

.. и я запускаю его через консоль один раз, и снова запускаю тот же код через консоль.

Да, он выдаст ошибку «Идентификатор 'str' уже объявлен», как и ожидалось, потому что переменная уже объявлена ​​и ее нельзя объявить снова (в отличие от объявления ее с помощью ключевого слова var), поэтому для повторного запуска кода через консоль , я должен обновить страницу, которая сбрасывает контекст кадра/цели.

Есть ли другой вариант?


person jeetaz    schedule 05.07.2018    source источник
comment
Существует функция console.clear(), добавленная 6 ноября 2012 г.   -  person Alex    schedule 05.07.2018
comment
@Alex Вопрос не в очистке журналов консоли, а в контексте консоли. Пожалуйста, прочтите еще раз!   -  person jeetaz    schedule 05.07.2018
comment
Возможный дубликат назначения и переменных очистки консоли Chrome   -  person Andreas    schedule 05.07.2018
comment
@Alex OP хочет очистить контекст консоли. Переменные все еще определены   -  person Seblor    schedule 05.07.2018
comment
Вы не можете повторно объявить или отменить объявление переменных, а код консоли выполняется в глобальной области видимости. Единственный способ сделать сброс - window.location.reload().   -  person Bergi    schedule 05.07.2018
comment
@Bergi Да, это то, что я искал, если есть способ избежать обновления страницы, но, поскольку он работает в глобальном пространстве, его нет. Возможно, вы захотите протестировать через консоль, большой объем кода может быть более одного раза, и консоль не позволит вам это сделать, что я считаю неудачным, но законным, согласен.   -  person jeetaz    schedule 05.07.2018
comment
@jeetaz Затем поместите его в область блока, чтобы ваши переменные const и let оставались локальными.   -  person Bergi    schedule 05.07.2018
comment
Согласен, объем блока @Bergi может сработать.   -  person jeetaz    schedule 05.07.2018
comment
@Bergi Почему var str1 = Привет; window.str1 работает, но пусть str2 = Привет снова; window.str2 не запускается с помощью консоли? Я думал, что они оба созданы в глобальном масштабе.   -  person jeetaz    schedule 05.07.2018
comment
@jeetaz Из-за тонкой разницы   -  person Bergi    schedule 05.07.2018


Ответы (4)


Как уже упоминалось в комментариях, код оценивается в глобальной области видимости, поэтому невозможно отменить объявление переменной, объявленной с помощью let и т. д., как глобальной, кроме как путем перезагрузки текущего окна.

Оценка

let str = "Hello";

подряд всегда будет вызывать ошибку Identifier 'str' has already been declared.

Одним из обходных путей является оценка кода как полных фрагментов с блочной областью:

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

Обратите внимание, что блоки не имеют возвращаемого значения (это операторы, а не выражения), но последнее выражение в блоке обрабатывается консолью, поэтому 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 {}`
person Estus Flask    schedule 05.07.2018
comment
var работает последовательно, это правда. Мне понравилась идея IIFE с возвращаемым значением. Пометка как ответ. Но если вы думаете по-другому, например, переопределение глобальной функции, объявленной с помощью ключевого слова let, и выполнение этого последовательно через консоль, не допускается, как это обычно проверяется через консоль. - person jeetaz; 05.07.2018
comment
переопределение глобальной функции, объявленной с помощью ключевого слова let. Обычно вы никогда не захотите намеренно создавать глобальную функцию с let именно из-за того, как она отличается от var (не может быть повторно объявлена, не определена в window) . Вероятно, это единственный случай, когда var считается приемлемым в ES6. - person Estus Flask; 05.07.2018

В основном у вас есть два варианта:

  1. Самый простой: выполните window.location.reload() в консоли.
  2. Вы можете использовать Block scope или IIFE.

Что будут делать block scope и IIFE, так это то, что они не будут объявлять переменные в глобальной области видимости, как вы делали. Вместо этого он объявит эти переменные в этой области. Кроме того, в отличие от let, var позволяет повторно объявить его.

person BlackBeard    schedule 05.07.2018
comment
Это очищает глобальную область консоли, но на самом деле ее нужно запускать из нее, а не во фрагмент. - person Carmine Tambascia; 27.03.2021

Это довольно легко:

  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
};
person aerioeus    schedule 23.08.2019

При объявлении любых переменных или функций в консоли разработчика вы влияете на контекст выполнения global, который для веб-браузеров равен window.

Использование console.clear() очищает видимую историю внутри вашей консоли, но не удаляет определения переменных.


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

Если вы не хотите вручную очищать их все один за другим, вы можете сохранить их в object и null объекте вместо отдельных переменных, например так:


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

person Alex    schedule 05.07.2018
comment
delete x и delete object абсолютно не работают. - person Bergi; 05.07.2018