欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js作用域详解

程序员文章站 2022-04-19 09:53:15
...

js的作用域

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

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

 

console.clear();
function test()
{
    var name2="whuang";
  console.log("name:"+name2);
  
}
console.log(name2);
test();

 运行时报错
js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
 

 

解说:

变量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();

 
js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
 解说:name3是方法inTest里面的局部变量,所以在inTest方法外面是无法访问的.

 

 

 

 

 

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

 

function test()
{
  var name3="whuang";
    function inTest()
    {
      
      console.log("name:"+name3);
    
    }
    inTest();
}

test();

 运行结果:
js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
 

 

解说:在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方法访问
js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
 

 

范例

 

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

 运行结果:
js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
 

 

 

注意:

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

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

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

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

http://blog.csdn.net/hw1287789687

  • js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
  • 大小: 19.3 KB
  • js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
  • 大小: 16.3 KB
  • js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
  • 大小: 12 KB
  • js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
  • 大小: 33.4 KB
  • js作用域详解
            
    
    博客分类: javascriptJava Web 闭包单例私有成员变量私有变量作用域 
  • 大小: 25.2 KB