将变量赋值给全局作用域有什么危险或好处吗?
Are there any dangers or benefits of assigning a variable to the global scope
最近我读了一篇博客文章(不幸的是我忘记了),其中显示了这样的代码:
// 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捕获全局(窗口),所以实际上没有必要获取这个实例,因为它已经是全局的。
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 全局变量和全局对象的属性之间有什么区别吗
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在ember/handlers中使用value和valueBinding有什么区别
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 什么是&&在没有if的行中的变量之间
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- DOM元素和angular元素之间的主要区别是什么
- 将可变thisarg或上下文与javascript一起使用有什么危险
- Javascript SQL攻击:有人在MySQL中插入了一个脚本,阻止我删除他们的行.我在这里有什么危险
- 将变量赋值给全局作用域有什么危险或好处吗?
- 返回基元类型有什么危险
- 在HTML文本区域中什么是危险的