js作用域详解

js的作用域

我们要明确最基本的一点:

(1)在函数外面无法访问函数内的局部变量.

 

Js代码  js作用域详解
  1. console.clear();  
  2. function test()  
  3. {  
  4.     var name2="whuang";  
  5.   console.log("name:"+name2);  
  6.     
  7. }  
  8. console.log(name2);  
  9. test();  

 运行时报错
js作用域详解
 

 

解说:

变量name2是在方法test中定义的局部变量,所以在test方法外面是不可见的.

下面的代码是正确执行的:

 

Js代码  js作用域详解
  1. var name2="whuang";  
  2. function test()  
  3. {  
  4.       
  5.   console.log("name:"+name2);  
  6.     
  7. }  
  8. console.log(name2);  
  9. test();  

 

 

下面的代码会报错

 

Js代码  js作用域详解
  1. console.clear();  
  2. function test()  
  3. {  
  4.     function inTest()  
  5.     {  
  6.       var name3="whuang";  
  7.       console.log("name:"+name3);  
  8.       
  9.     }  
  10.     
  11.     console.log(name3);  
  12. }  
  13.   
  14. test();  

 
js作用域详解
 解说:name3是方法inTest里面的局部变量,所以在inTest方法外面是无法访问的.

 

 

 

 

 

(2)函数内部可以访问函数外面定义的局部变量

 

Js代码  js作用域详解
  1. function test()  
  2. {  
  3.   var name3="whuang";  
  4.     function inTest()  
  5.     {  
  6.         
  7.       console.log("name:"+name3);  
  8.       
  9.     }  
  10.     inTest();  
  11. }  
  12.   
  13. test();  

 运行结果:
js作用域详解
 

 

解说:在inTest方法内部可以访问inTest方法外面定义的局部变量.

 

(3)js的私有成员变量

通过以上两点,我们可以实现js中的私有成员变量

 

Java代码  js作用域详解
  1. function Person()  
  2. {  
  3.   this.username="whuang";  
  4.   var sex='man';  
  5.  this.getSex=function()  
  6.   {  
  7.     return sex;  
  8.   }  
  9.   this.setSex=function(sex2)  
  10.   {  
  11.     sex=sex2;  
  12.   }  
  13. }  
  14.   
  15. var person2=new Person();  
  16. console.log("username:"+person2.username);  
  17.   
  18. person2.username="mudan";  
  19. console.info("username:"+person2.username);  
  20.   
  21. console.info("sex:"+person2.sex);  

 运行结果:

 

username:whuang
 
username:mudan
 
sex:undefined

解说:通过对象person2.sex无法访问到sex,因为sex不是Person的成员变量.

但是可以通过getSex方法和setSex方法访问
js作用域详解
 

 

范例

 

Js代码  js作用域详解
  1. function Person(name){   
  2.         
  3.     this.getName=function(){   
  4.        return name;   
  5.     };   
  6.     
  7.     this.setName=function(value){   
  8.        name=value;   
  9.     };   
  10. }   
  11.     
  12. var person=new Person("zxj");   
  13. console.log(person.getName());    //zxj   
  14. person.setName("Greg");   
  15. console.info(person.getName());    //Greg  

 运行结果:
js作用域详解
 

 

 

注意:

(1)在函数外面无法访问函数里面声明的局部变量(使用var声明的);

(2)初始化未经声明的变量,总会创建一个全局变量

(3)字面量:使用json格式创建单例对象.例如{name:"whuang"}

参考:http://www.cnblogs.com/zxj159/archive/2013/06/03/3115139.html

http://blog.csdn.net/hw1287789687