我们平时在做开发的时候,难免会遇到自己定义的变量、或者逻辑被同事无情的覆盖或者伤筋动骨。即使现在的开发已高度模块化,但是极端情况下还是会出现这种协作场景的。那么怎么办呢?自研的变量锁出场了!哈哈
/** * 将我们的业务逻辑使用一个立即执行函数包裹,能有效避免他人代码入侵,从而造成不必要的麻烦; * 代码块开始和结尾必须使用分号,原因是代码块相邻前后都使用立即函数的情况下会抛错; * 立即函数中 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吗,没有办法的事情。
发表评论