gpt4 book ai didi

JavaScript:window.spam 是一个好习惯吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:10:17 31 4
gpt4 key购买 nike

我注意到人们到处都提到“只要在你的 JS 代码顶部定义一个变量,它就变成了全局变量”来回答诸如“我如何从函数内部创建一个全局变量?”。大多数答案一开始就说不可能实现。当然可以这样做:

<script type="text/javascript">
window.spam = 'Hello World';
</script>

然后,稍后在您的代码中,您可以说:

<script type="text/javascript">
alert(spam);
</script>

这在 IE6+、Firefox、Chrome、Safari 等中工作得很好。那么为什么没有人这样做呢?

在我的例子中,我希望人们从他们的代码和我的 AJAX 库中的任何地方访问一个名为 fooBar 的全局变量,我希望该变量在幕后自动更新,以便当他们说 $.do_some_magic() 他们可以确定 fooBar 将反射(reflect) $.do_some_magic() 所做的更改,而无需考虑它。我不希望他们必须在他们的代码中创建变量,我也不希望在我的库代码中创建变量。我想我只是讨厌在顶部定义全局变量,除非有充分的理由不这样做,否则宁愿不这样做。有吗?

最佳答案

清晰度

这是一种明确的方式,表明您打算创建一个全局变量。

// Unclear: Intentional, or accident
function privateScope() {
spam = "hello";

function globalFunction() {

}
}

这将使一个变量成为全局变量,因为它是以这种方式声明的,尽管程序员打算让变量和函数具有全局范围并不是很明显。

// Clear: Intentional global use
function privateScope() {
window.spam = "hello";

window.globalFunction = function () {

}
}

这个例子比较明显。

最佳实践

如果您提前知道一个变量将在全局范围内使用,那么它应该在您的文件顶部声明,在您的所有函数之外:

var spam;

如果您在自执行匿名函数中,则显式使用 window.spam:

(function(){
// currently private to this scope
var spam;

... lots of code ...

// Expose the variable publically
window.spam = spam;
})();

名称冲突

anthares brought up另一方面,名称冲突

许多库公开了一个顶级对象。您可以构造一个函数来执行此操作,也可以使用简单的对象文字作为命名空间:

(function(){
// Expose a single top level variable
window.YourCompany = { };

// Private:
var spam = "name";

... other code ...


// Make public
window.YourCompany.spam = spam;

})();

关于JavaScript:window.spam 是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218582/

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