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