javascript在不用框架的情况下,为了防止全局变量污染等,如何写更好(或更优雅)

用函数的形式

//做饭 
let cook = function(){
    let FoodMaterial = 'Tomatoes'; //食材:西红柿
    let Spice = '食用盐'; //作料:食用盐
    return {
        buy:function(){
            console.log('购买' + FoodMaterial + '和' + 'Spice' );
        },
        doFood:function(){
            console.log(`开始做${FoodMaterial}`);
        },
        setFood:function(food){
            //未传参则不执行赋值
            food && (FoodMaterial = food);
        }
    }
}
let o = cook();
o.setFood('肉');
o.buy();    //购买肉和Spice
o.doFood();//开始做肉     

对象的形式

let cook = {
        FoodMaterial : 'Tomatoes', //食材:西红柿
        Spice :'食用盐', //作料:食用盐
           buy:function(){
              console.log('购买' + FoodMaterial + '和' + 'Spice' );
        },
        doFood:function(){
              console.log(`开始做${FoodMaterial}`);
        },
        setFood:function(food){
                //未传参则不执行赋值
           food && (FoodMaterial = food);
        }
    }
    let o = cook;
    o.setFood('肉');
    o.buy();    //购买肉和Spice
    o.doFood();//开始做肉

问题一:

以上代码结果一样,但是有什么不同么,用哪个更好?

问题二:

在不用js框架的情况下,请问怎么编写代码比较好,附代码更好
阅读 2.4k
4 个回答

回答下问题一吧,两种用法是不同的。
对象的形式:

let o1 = cook; let o2 = cook; 

o1o2是指向同一块内存地址的,所以可以认为此时的o1o2cook是同一个对象。

函数的形式:

let o1 = cook(); let o2 = cook(); 

每执行一次函数,就return一个对象,执行两次函数,会创建两个对象,所以o1o2是没有关联的。

一个封闭空间解决所有变量污染函数重复现象

es6 lef/const

or

(function(){
    //cose
    var a=1;
    console.log(a);//1
})();
(function(){
    //cose
    var a=2;
    console.log(a);//2
})();
console.log(a);//not defined

做个类比,用类创建实例好还是直接写个实例好?
我不知道该对比什么,答案就是都得用并且看需求。

如果是单例,那么明显后者好;如果是普通类,那么你应该用 new。其它没啥差别。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题