作用域:
先举个例子
var a = 1;
console.log(a);//1
--------------------
function fun(){
var b = 2
}
console.log(b)//报错
概念: 作用于是运行时代码中的某些特定部分中变量,函数和对象的可访问性
全局作用域和函数作用域
最外层函数和最外层函数外面定义的变量拥有全局作用域
function outFun() { //最外层函数
var inVariable = "内层变量";
function innerFun() { //内层函数
console.log(inVariable);
}
innerFun();
}
console.log(outVariable); //我是最外层变量
outFun(); //内层变量
console.log(inVariable); //inVariable is not defined
innerFun(); //innerFun is not defined
所有未定义直接复制的变量自动声明为拥有全局作用域
function outFun2() {
variable = "未定义直接赋值的变量";
var inVariable2 = "内层变量2";
}
所有window对象的属性拥有全局作用域
弊端:如果变量都拥有全局作用域,会污染全局命名空间,容易引起冲突。
办法:在代码最外层写 (function(){}...)
块级作用域
闭包:
function user(name){
var age,sex;
return{
getName:function(){
return name;
},
setName:function(newName){
name = newName
},
getAge:function () {
return age;
},
setAge:function (newAge) {
age = newAge
},
getSex:function () {
return sex;
},
setSex:function (newSex) {
sex = newSex;
}
}
}
var whh = new user();
whh.setName("王花花");
whh.setAge("22");
whh.setSex("女");
var name = whh.getName();
var age = whh.getAge();
var sex = whh.getSex();
console.log(name,sex,age);