首页 > js 全局作用域污染是什么意思

js 全局作用域污染是什么意思

最近在做angular,都用controllerAs语法,说这样用的好处有一个条是避免污染全局作用域。我想问问污染全局作用域是什么意思?全局污染会有哪些不好的后果?感激不尽!!!


额~~我也不知道怎么说,简单的理解就是不要直接在window下定义参数,因为很容易被修改覆盖导致代码出错;
不好的后果就是:
1.容易被修改导致代码出错
2.不方便维护,因为在出错的时候,有时候你很难去找到原因。


就是一个全局变量一个函数变量,函数变量只在函数里生效。而全局影响比较大,因为你经常一个页面引入一大堆JS, 而且很多都不是自己写的,所以全局变量的使用得谨慎,因为很容易就会重名,出现命名冲突之类的麻烦。污染全局的大概意思就是,没有必要的全局变量,因为原本可以用函数变量。。。(会给其他脚本的全局变量带来例如命名冲突类的麻烦)


全局作用域的意思就是你直接给window添加属性或者方法,污染全局变量的后果就是,在多人开发时,容易造成命名的冲突,假如A写了一个函数命名为foo,而同时开发的B也写了一个函数命名为foo,那么结果就是这两个中一个将会被另一个所覆盖。为了解决这个问题我们就引入了模块化的概念,模块化资料可以参看阮一峰博客:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html


"污染全局作用域" 是指你讲本不应该出现在全局作用域下的变量声明在全局作用域下
例如你在一个a.js文件中
var myVar='1234';
//或者 myVar='1234';
那么在全局作用域下就会出现这个变量
而在另一个b.js文件中也同样的出现了如下的代码
var myVar='5678';
//或者 myVar='5678';

那么b.js中声明的变量将覆盖a.js中声明的变量,可能导致a.js中的函数执行出现你意向不到的结果
而这个结果的原因会随着你的代码的增多,引入文件的增多,会变得难以被发现

避免污染的一个方法是将变量包在一个函数体内(JS只有函数作用域),或通过闭包私有化
或模块化(本质上还是放在函数体内)

【热门文章】
【热门文章】