我知道这一定是非常基础的内容,但我不了解示波器的工作方式。我希望在整个JavaScript文件中都知道closed
变量。
我有类似的东西(在jQuery中):
var closed = 0;
$(function(){
console.log(closed);
});
但是closed
被记录为false
。我使用load
和onload
函数尝试了很多事情,但是失败了。
答案 0 :(得分:1)
使用let
代替var
,因为closed
是JavaScript运行时使用的全局变量,因此要使其在代码范围内是局部的,可以使用let
var
的值,它考虑了全局closed
属性,将变量设置为全局范围。
let closed=0;
$( function() {
console.log(closed);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:1)
closed
是指window.closed
;它始终是布尔值,对其进行重新定义会产生短绒警告,如“ 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";
的人实际上redirects到./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.
});