2018-03-20 js学习笔记

1.私有作用域

var b=100;
alert(b);// 100

// 这里的全局变量b未销毁 会造成全局变量污染
a = null;
(function(){
    var a=100;
    alert(a);
})()    //.这里是全局私有作用域  自执行完就销毁了

alert(a);//  undefind  

总结:我们应该少向全局作用域中添加过多的变量和函数,在大型项目中,多人开发时过多的全局变量容易导致命名冲突,影响很大。我们一般采用块级作用域(私有作用域),即可以使用自己命名的变量 又不必担心扰乱全局。

1.2私有作用域不被外部访问

function fun1(){
    var a=100;    //a 这个变量属于函数内部作用域的变量  外部不能访问
}
fun1();///

2.私有变量

/*
function Box(){
  this.a = 100;                     // 属性      公有的
  this.fun=function(){          //方法        公有的
    return "处理中";
}
}
var box = new Box();
alert(box.a);   //100
alert(box.fun()) //  处理中

*/
如果想让私用变量不被外部使用:
function Box(){
  var a = 100;                     // 属性      私有的  不能被函数外部访问
 function fun (){          //方法        私有的
    return "处理中";
}
this.publicGo = function(){    // 这里是对外可见的公有接口 特权方法
    return fun();
}
this.GetA = function(){
  return a;
}
}
var box = new Box();
alert(box.publicGo());   //处理中  
alert(box.GetA()); //100
 

通过构造函数传参

function Box(value){
  var user = value;   // 私有变量      
   this.getUser = function () {
      return user;
}
}
var box = new Box("shh");
alert(box.getUser()); //  shh

静态私有变量

(function(){
    var user = ''
    Box = function (value){
        user = value;
    }
    Box.prototype.getUser= function(){   //使用prototype 导致方法共享了
        return user;
    }
        Box.prototype.setUser = function(value){
           user = value  ;   
     } 
})()
var box = new Box("shh");
console.log(box.getUser()); //shh
var box2 = new Box();
box2.setUser("saa");
console.log(box2.getUser())//saa
console.log(box2.getUser())//saa

你可能感兴趣的:(2018-03-20 js学习笔记)