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

时间: 2024-08-31 20:06:59

js作用域详解的相关文章

AngularJS 作用域详解及示例代码_AngularJS

范围扮演其视图连接控制器的角色一个特殊的JavaScript对象.范围包含了模型数据.在控制器,模型数据通过$scope对象访问. <script> var mainApp = angular.module("mainApp", []); mainApp.controller("shapeController", function($scope) { $scope.message = "In shape controller"; $s

Python中的变量和作用域详解_python

作用域介绍 python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:globa,全局变量,就是模块级别定义的变量: B:built-in,系统固定模块里面的变量,比如int, bytearray等. 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB. x = int(2.9) # int bu

Jquery揭秘系列:ajax原生js实现详解(推荐)_jquery

讲到ajax这个东西,我们要知道两个对象XMLHTTPRequest和ActiveXObject ,提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力.可以同步或异步返回 Web 服务器的响应,并且能以文本或者一个 DOM 文档形式返回内容.XMLHTTPRequest基本上算是标准化了,兼容大部分浏览器ActiveXObject这玩儿意儿是微软的东西,所以是为了兼容IE版本,我们用的只是它的xmlHTTP功能. 为了功能的明确和清晰,我们

微信小程序使用第三方库Immutable.js实例详解_javascript技巧

前言 Immutable JS 提供一个惰性 Sequence,允许高效的队列方法链,类似 map 和 filter ,不用创建中间代表.immutable 通过惰性队列和哈希映射提供 Sequence, Range, Repeat, Map, OrderedMap, Set 和一个稀疏 Vector. 微信小程序无法直接使用require( 'immutable.js' )进行调用,需要对下载的Immutable代码进行修改,才能使用. 原因分析 Immutable使用了UMD模块化规范 (f

JS正则表达式详解[收藏]_正则表达式

JS的正则表达式 //校验是否全由数字组成  function isDigit(s)    {    var patrn=/^[0-9]{1,20}$/;    if (!patrn.exec(s)) return false   return true   }    //校验登录名只能输入5-20个以字母开头.可带数字."_"."."的字串  function isRegisterUserName(s)    {    var patrn=/^[a-zA-Z]{1

移动端日期插件Mobiscroll.js使用详解_javascript技巧

mobiscroll js日期插件的基础入门案例,移动端开发过程中可能会用到. <html> <head> <meta charset="UTF-8"> <title>mobiscroll</title> <link type="text/css" rel="stylesheet" href="../js/mobiscroll.custom-2.6.2.min.css&q

JS正则表达式详解[收藏]

JS的正则表达式 //校验是否全由数字组成  function isDigit(s)    {    var patrn=/^[0-9]{1,20}$/;    if (!patrn.exec(s)) return false   return true   }    //校验登录名:只能输入5-20个以字母开头.可带数字."_"."."的字串  function isRegisterUserName(s)    {    var patrn=/^[a-zA-Z]{

JS正则表达式详解(转)

开篇,还是得说说 ^    和    $    他们是分别用来匹配字符串的开始和结束,以下分别举例说明 "^The": 开头一定要有"The"字符串; "of despair$":    结尾一定要有"of despair" 的字符串; 那么, "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配 "notice": 匹配包含notice的字符串 你可以看

js变量以及其作用域详解

一.变量的类型  Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: i=100;//Number类型  i="variable";//String类型  i={x:4};//Object类型  i=[1,2,3];//Array类型 JS的这种特性虽然让我们的编码更加灵活,但也带来了一个弊端,不利于Debug,编译器的弱检测让我们维护冗长的代码时相当痛苦