我们平时在做开发的时候,难免会遇到自己定义的变量、或者逻辑被同事无情的覆盖或者伤筋动骨。即使现在的开发已高度模块化,但是极端情况下还是会出现这种协作场景的。那么怎么办呢?自研的变量锁出场了!哈哈
/**
* 将我们的业务逻辑使用一个立即执行函数包裹,能有效避免他人代码入侵,从而造成不必要的麻烦;
* 代码块开始和结尾必须使用分号,原因是代码块相邻前后都使用立即函数的情况下会抛错;
* 立即函数中 window、document 参数为可选,假如用到时会减少作用域链查找时间;
*/
;(function (win, doc) {
/**
* 变量锁
* @author yanghuning
* @param {object} options 参数1对象
* @param {string} options.key 赋值key
* @param {any value} options.value 赋值 value
* @param {object} parent 参数2对象,不传则为 window
* @return {undefined} 无返回值
*/
function vLock (options, parent) {
if (!options) return;
if (!options.key) throw 'Error: Missing options.key, it is must be param.';
Object.defineProperty(parent || window, options.key, {
value: options.value,
writable: false,
enumerable: false,
configurable: false
});
}
// 使用变量锁函数来创建一个变量
vLock({
key: 'myCity',
value: '我在北京朝阳区'
}, win);
// TODO SOMETHING...
}(window, document));注:上面代码中 vLock 函数当然使用 let 或 const 声明也没有问题,这不为了照顾一下古老的IE吗,没有办法的事情。

发表评论