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);
运行结果:
username:whuang
username:mudan
sex:undefined
解说:通过对象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
时间: 2024-11-01 11:16:09