closed
относится к window.closed
; это всегда логическое значение, и при его переопределении выдается предупреждение linter, например «Переопределение closed
» .
Это свойство только для чтения указывает, закрыто ли указанное окно или нет.
Переменные, которые ведут себя так, можно найти в следующих списках:
Запустите фрагмент, чтобы получить полный список имен переменных, которые вы не можете безопасно использовать в глобальной области видимости:
const props = Object.entries(Object.getOwnPropertyDescriptors(window)),
undesirable = {
set: (desc) => desc,
configurable: (desc) => !desc,
writable: (desc) => !desc
};
Array.from(document.querySelectorAll("[id]"))
.forEach((span) => span.innerHTML = props
.filter(([prop, {[span.id]: desc}]) => undesirable[span.id](desc))
.map(([prop]) => `<code>${prop}</code>`)
.join(", "))
code{
background: #eee;
padding: 1px 3px;
}
<p>Properties that have a Setter which may change the type or the action, when a value is set to it:</p>
<span id="set"></span>
<hr/>
<p>Properties that are not configurable (no type change allowed):</p>
<span id="configurable"></span>
<hr/>
<p>Properties that are read-only:</p>
<span id="writable"></span>
Вы заметите, это лот . Это также множество коротких, общих имен переменных, таких как name
, length
[1] , [2] , status
[1] , [2] , self
, top
, menubar
и parent
. Кроме того, что касается изменения действия при назначении после сеттеров, что-то вроде var location = "Podunk, USA";
на самом деле перенаправляет вас в местоположение ./Podunk, USA
.
Мораль истории: избегайте глобальных переменных , как эти. Они просто столкнутся с другими глобальными свойствами. Всегда используйте переменные области действия, такие как в IIFE:
(function(){
var closed = 0;
$(function(){
console.log(closed);
});
})();
Использование let
вместо var
- другое решение.
Поскольку я не использую jQuery для большей части своего кода, я предпочитаю оборачивать все в слушатель DOMContentLoaded
, где я могу охватить все переменные, которые мне нужны, и, кроме того, использовать "use strict";
:
// My personal boiler-plate:
addEventListener("DOMContentLoaded", function(){ "use strict";
// Code goes here.
});