js全局变量污染的产生场景
js中全局变量污染的场景,当代码非常长,开发周期长,如果不想办法去解决或者防止全局变量污染的问题,就会造成二次赋值同一个之前定义过的变量。(由于项目开发周期过长你又不记得之前是否定义过这个变量,在赋值之前定义过的变量的时候就污染了全局变量。)
我们解决方案如下↓
1. 使用namespace模式解决全局环境污染。
namespace模式就是把变量装在对象里面,在全局定义一个对象,然后把所有的你想写的全局变量定义在对象内部。你可以随时打印对象查询你是否定义过某个变量。
var obj={
a:“1”,
b:“2”}
namespace模式的缺点:就是由于我们把变量装在了一个对象当中,对象内部的东西是可以通过操作对象的方式进行增删改查的,不安全。
2. IIFE模式:(匿名函数自调用【闭包】)方式解决全局污染
```javascript
3. (function(window){
4. let msg="module4";
5. function foo(){
6. console.log("foo()",msg);
7. }
8. window.module4=foo;
9. // 我们在window对象上写入一个属性名为module4属性值为foo函数
10. })
我们调用foo函数
写法一window.module4()
写法二module4()因为window可以省略