gpt4 book ai didi

javascript - 为什么当我将一个变量复制到 window 对象时它变成了 public?

转载 作者:行者123 更新时间:2023-11-30 17:09:45 24 4
gpt4 key购买 nike

无论范围如何,如果我创建一个变量然后将它传递给(克隆它)窗口对象,它就会变成公共(public)的。一段代码说一千个字:

(function(){
var notCloned = false,
toClone = true;
window.toClone = toClone;
}());

在这种情况下,我可以访问 toClonewindow.toClone,但不能访问 notClone。我还注意到它们以某种方式绑定(bind),因为您对一个应用的任何更改都会影响另一个,例如:

window.toClone = false;
console.log(toClone); // It changes to false, too

谁能解释为什么以及如何将 toClone 保持为私有(private)(超出全局范围)变量?

提前致谢。

最佳答案

您在 console.log 语句中引用了全局变量。

试试这个:

(function(){
var notCloned = false,
toClone = true;
window.toClone = toClone;
window.whatsClone = function() { return toClone; }
}());

window.toClone = false;
console.log(toClone); // Will print false because actually is getting from the scope of global window
console.log(whatsClone()); // Will print true

whatsClone() 将获得适当范围的变量。

我创造的快JSBin fiddle

另请记住,基元(String、Number、Boolean)未被引用,它们被复制,所以基本上:

foo = true;
window.bar = foo;

window.bar 不会是对 foo 的引用,它只是 bool 值的一个副本。

关于javascript - 为什么当我将一个变量复制到 window 对象时它变成了 public?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27277412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com