Способ сброса контекста консоли Chrome DevTools - PullRequest
0 голосов
/ 05 июля 2018

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

Допустим, например, у меня есть переменная, объявленная с помощью let keyoword ..

let str = "Hello";

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

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

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

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Как уже упоминалось в комментариях, код оценивается в глобальной области видимости, поэтому невозможно отменить объявление переменной, объявленной с помощью 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 {}`
0 голосов
/ 05 июля 2018

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

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

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

0 голосов
/ 05 июля 2018

На что вы влияете при объявлении любых переменных или функций в консоли разработчика, это контекст выполнения 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
...