function module(){
var a = 1;
var b = 1;
function add(){
console.log(a+b)
}
function dec(){
console.log(a-b)
}
return {add:add,dec:dec}
}
var mod = module();
mod.add();
mod.dec();
立即执行函数可以让变量私有化,避免变量污染。那么就上面的代码而言,存在变量污染这个问题吗,试了半天也感觉不出来啊。那么用立即执行函数里嵌套闭包来实现模块化的方式,它的意义在哪里呢
可以参考阮一峰老师的这一篇博文: http://www.ruanyifeng.com/blo... ,可见你的方法属于其中提到的第一种写法。
本人也是新手前端,了解也不甚深,但是可以略微说一下你疑惑的点:
Q1. 就上面的代码而言,存在变量污染这个问题吗?
A1. 假如你在脚本中直接这样写代码,那么很明显你已经占用了 module 和 mod 两个变量,如果页面后来引入的其他脚本中也使用了名为 module 的变量,你再次想调用 module 的时候,得到的就不再是你想要的结果了,甚至可能抛错,所以变量污染是毋庸置疑的。
Q2. 用立即执行函数里嵌套闭包来实现模块化的方式,它的意义在哪里呢?
A2. 第一个意义是避免 A1 所述的全局变量污染问题;第二个意义在于你可以把一些你不允许从模块外部修改的东西放到闭包里去,比如你本来维护着一个全局唯一的 ID ,结果有某个倒霉蛋不小心导致 ID 重复,如果把这个 ID 放到闭包里,只暴露一个自增的方法来获取 ID ,那么可能只有变量溢出会导致 ID 重复了。