js作用域详解

简介:

js的作用域

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

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

 

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

 运行时报错

 

 

解说:

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

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

 

Js代码   收藏代码
  1. var name2="whuang";  
  2. function test()  
  3. {  
  4.       
  5.   console.log("name:"+name2);  
  6.     
  7. }  
  8. console.log(name2);  
  9. test();  

 

 

下面的代码会报错

 

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

 

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

 

 

 

 

 

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

 

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

 运行结果:

 

 

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

 

(3)js的私有成员变量

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

 

Java代码   收藏代码
  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代码   收藏代码
  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  

 运行结果:

 

 

 

注意:

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

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

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

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

http://blog.csdn.net/hw1287789687

相关文章
|
19天前
|
存储 JavaScript 前端开发
解释 JavaScript 中的作用域和作用域链的概念。
【4月更文挑战第4天】JavaScript作用域定义了变量和函数的可见范围,静态决定于编码时。每个函数作为对象拥有`scope`属性,关联运行期上下文集合。执行上下文在函数执行时创建,定义执行环境,每次调用函数都会生成独特上下文。作用域链是按层级组织的作用域集合,自内向外查找变量。变量查找遵循从当前执行上下文到全局上下文的顺序,若找不到则抛出异常。
21 6
|
1月前
|
自然语言处理 JavaScript 前端开发
深入理解JS的执行上下文、词法作用域和闭包(中)
深入理解JS的执行上下文、词法作用域和闭包(中)
|
1月前
|
存储 自然语言处理 JavaScript
深入理解JS的执行上下文、词法作用域和闭包(上)
深入理解JS的执行上下文、词法作用域和闭包(上)
|
4月前
|
自然语言处理 JavaScript 前端开发
作用域的概念及作用?作用域的分类?.js 属于哪种作用域?
作用域的概念及作用?作用域的分类?.js 属于哪种作用域?
33 0
|
1月前
|
JavaScript 前端开发
js开发:请解释什么是作用域(scope),并说明全局作用域、局部作用域和块级作用域的区别。
JavaScript中的作用域规定了变量和函数的可见性与生命周期。全局作用域适用于整个脚本,变量可通过全局对象访问,可能导致命名冲突和内存占用。局部作用域限于函数内部,每次调用创建新作用域,执行完毕后销毁。ES6引入的块级作用域通过`let`和`const`实现,变量仅在其代码块内有效,并有暂时性死区。作用域机制有助于代码组织和变量管理。
23 1
|
1月前
|
JavaScript 前端开发
JS作用域与作用域链
JS作用域与作用域链
|
1月前
|
自然语言处理 JavaScript 前端开发
深入探索 JS 的提升机制、函数与块作用域以及函数表达式和声明(下)
深入探索 JS 的提升机制、函数与块作用域以及函数表达式和声明(下)
|
1月前
|
JavaScript 前端开发
深入探索 JS 的提升机制、函数与块作用域以及函数表达式和声明(上)
深入探索 JS 的提升机制、函数与块作用域以及函数表达式和声明(上)
|
1月前
|
自然语言处理 JavaScript 前端开发
深入理解JS的执行上下文、词法作用域和闭包(下)
深入理解JS的执行上下文、词法作用域和闭包(下)
|
3月前
|
JavaScript
JS作用域(全局作用域+局部作用域)
JS作用域(全局作用域+局部作用域)
14 0