将变量赋值给全局作用域有什么危险或好处吗?

Are there any dangers or benefits of assigning a variable to the global scope

本文关键字:危险 什么 赋值 变量 全局 作用域      更新时间:2023-09-26

最近我读了一篇博客文章(不幸的是我忘记了),其中显示了这样的代码:

// in global scope
var app = this;
greet = function() { return 'Hello World!' };
var sayGoodbye = function() { return 'Bye' };
delete greet;
delete sayGoodbye;
sayGoodbye(); // 'Bye'
app.greet(); // undefined

并提到这是能够通过将全局变量转换为全局作用域的对象属性来删除变量(这是不可能的)的解决方案。然而,这样做有什么危险/麻烦吗?它的真正好处是什么?

我总是在局部作用域中工作,当变量(对象)不再在作用域中(需要)时,它们将被垃圾收集器处理。我不建议在全局作用域中工作,只有在整个程序中都需要的函数,应该总是可用的,所以永远不会被删除。

,否则你不应该使用全局作用域。这是编程的一个常见规则,应该避免使用全局变量。全局变量并不安全,程序中的所有内容都可以访问和修改它。

你不应该使用它,如果你可以避免使用局部变量(函数内部)。

与其使用大量的全局变量,不如通过函数传递局部变量作为参数(实参)。这样,未经授权的函数就不能访问变量(读或写)。

(内存)此外,全局变量不会被垃圾收集器收集,因为总会有对它的引用。所以你分配的内存不会再用了。或者在函数中,现在不相关

同样与你的问题相关:Delete只对对象属性有效。

如果你说的全局是指整个web应用的全局。App = this捕获全局(窗口),所以实际上没有必要获取这个实例,因为它已经是全局的。