Javascript 如果我将变量“closed”全局定义为“0”,为什么会将其记录为“false”?
我知道这一定是非常基本的东西,但我不明白范围是如何工作的。我希望在整个JavaScript文件中都知道Javascript 如果我将变量“closed”全局定义为“0”,为什么会将其记录为“false”?,javascript,variables,scope,Javascript,Variables,Scope,我知道这一定是非常基本的东西,但我不明白范围是如何工作的。我希望在整个JavaScript文件中都知道closed变量 我有类似的东西(在jQuery中): 但是closed被记录为false。我用load和onload函数尝试了很多东西,但是我失败了。使用let而不是var,因为closed是JavaScript运行时使用的全局变量,因此为了使其位于代码范围的局部,您可以使用let而不是var,后者考虑到globalclosed属性,将变量设置为全局范围 let closed=0; $(函数
closed
变量
我有类似的东西(在jQuery中):
但是
closed
被记录为false
。我用load
和onload
函数尝试了很多东西,但是我失败了。使用let
而不是var
,因为closed
是JavaScript运行时使用的全局变量,因此为了使其位于代码范围的局部,您可以使用let
而不是var
,后者考虑到globalclosed
属性,将变量设置为全局范围
let closed=0;
$(函数(){
控制台日志(关闭);
});代码>
var closed=0全局范围中的code>不会创建数字,而是保持布尔值false
原因是在这种情况下,closed
指的是;它总是一个布尔值,重新定义它会产生一个类似“重新定义关闭的”这样的警告
此只读属性指示引用的窗口是否关闭
可以在以下列表中找到行为类似的变量:
运行代码段以获取无法在全局范围内安全使用的变量名的完整列表:
const props=Object.entries(Object.getOwnPropertyDescriptors(窗口)),
不良={
设置:(desc)=>desc,
可配置:(desc)=>!desc,
可写:(desc)=>!desc
};
Array.from(document.querySelectorAll(“[id]”)
.forEach((span)=>span.innerHTML=props
.filter(([prop,{[span.id]:desc}])=>不需要的[span.id](desc))
.map(([prop])=>`${prop}
`)
.join(“,”)
code{
背景:#eee;
填充物:1px 3px;
}
具有setter的属性,当为其设置值时,setter可能会更改类型或调用某些操作:
不可配置的属性:
只读属性:
closed
指全局范围内的窗口。closed
。不要全局定义变量。如果必须,请将所有内容都封装在一个生命中。它看起来像一个生命,外部变量无法访问它。这正是我所需要的。谢谢。@MinirockAkeru这个答案没有解释为什么会得到false
。并不是所有变量都是这样的。在大多数情况下,这甚至不起作用。它适用于关闭的
,但不适用于顶部
,即使它们都是窗口
上的不可写、可配置、可枚举、非setter getter。我目前不明白(至少)为什么窗口
,当在全局范围中使用const
或let
时,top
和document
的行为与所有其他属性不同。也许我或其他人可以弄明白这一点,并完善这个答案中给出的解释。
var closed = 0;
$(function(){
console.log(closed);
});