要是实在不知道要干什么,那就喝两杯思路就来了!

导航菜单

代码块变量锁

我们平时在做开发的时候,难免会遇到自己定义的变量、或者逻辑被同事无情的覆盖或者伤筋动骨。即使现在的开发已高度模块化,但是极端情况下还是会出现这种协作场景的。那么怎么办呢?自研的变量锁出场了!哈哈

/**
 * 将我们的业务逻辑使用一个立即执行函数包裹,能有效避免他人代码入侵,从而造成不必要的麻烦;
 * 代码块开始和结尾必须使用分号,原因是代码块相邻前后都使用立即函数的情况下会抛错;
 * 立即函数中 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吗,没有办法的事情。

发表评论