js的作用域
我们要明确最基本的一点:
(1)在函数外面无法访问函数内的局部变量.
?
console.clear();
function test()
{
var name2="whuang";
console.log("name:"+name2);
}
console.log(name2);
test();
?运行时报错
?
?
解说:
变量name2是在方法test中定义的局部变量,所以在test方法外面是不可见的.
下面的代码是正确执行的:
?
var name2="whuang";
function test()
{
console.log("name:"+name2);
}
console.log(name2);
test();
?
?
下面的代码会报错
?
console.clear();
function test()
{
function inTest()
{
var name3="whuang";
console.log("name:"+name3);
}
console.log(name3);
}
test();
?
?解说:name3是方法inTest里面的局部变量,所以在inTest方法外面是无法访问的.
?
?
?
?
?
(2)函数内部可以访问函数外面定义的局部变量
?
function test()
{
var name3="whuang";
function inTest()
{
console.log("name:"+name3);
}
inTest();
}
test();
?运行结果:
?
?
解说:在inTest方法内部可以访问inTest方法外面定义的局部变量.
?
(3)js的私有成员变量
通过以上两点,我们可以实现js中的私有成员变量
?
function Person()
{
this.username="whuang";
var sex=‘man‘;
this.getSex=function()
{
return sex;
}
this.setSex=function(sex2)
{
sex=sex2;
}
}
var person2=new Person();
console.log("username:"+person2.username);
person2.username="mudan";
console.info("username:"+person2.username);
console.info("sex:"+person2.sex);
?运行结果:
?
解说:通过对象person2.sex无法访问到sex,因为sex不是Person的成员变量.
但是可以通过getSex方法和setSex方法访问
?
?
范例
?
function Person(name){
this.getName=function(){
return name;
};
this.setName=function(value){
name=value;
};
}
var person=new Person("zxj");
console.log(person.getName()); //zxj
person.setName("Greg");
console.info(person.getName()); //Greg
?运行结果:
?
?
?
注意:
(1)在函数外面无法访问函数里面声明的局部变量(使用var声明的);
(2)初始化未经声明的变量,总会创建一个全局变量
(3)字面量:使用json格式创建单例对象.例如{name:"whuang"}
参考:http://www.cnblogs.com/zxj159/archive/2013/06/03/3115139.html
http://blog.csdn.net/hw1287789687
原文:http://hw1287789687.iteye.com/blog/2210297