JS全局变量的总结_作用域[上]_Len_qin_新浪博客

js全局变量:不错的JS中变量相关的细节分析        
         这里讨论下我对Javascript中变量相关细节认识有不当的处欢迎来此
  、变量类型  
  Javascript和Java、C这些语言区别它是种无类型、弱检测语言它对变量定义并不需要声明变量类型我们只
要通过赋值形式可以将各种类型数据赋值给同个变量例如:  
 
i=100;//Number类型  
i="variable";//String类型  
i={x:4};//Object类型  
i=[1,2,3];//Array类型  
  JS这种特性虽然让我们编码更加灵活但也带来了个弊端不利于Debug编译器弱检测让我们维护冗长代码时
相当痛苦  
   2、变量声明  
  JS中变量申明分显式申明和隐式申明  
 
  var i=100;//显式申明  
i=100;//隐式申明  
  在中使用var关键字进行显式申明变量是做为局部变量而没有用var关键字使用直接赋值方式声明是全局变
量     
  当我们使用访问个没有声明变量时JS会报错而当我们给个没有声明变量赋值时JS不会报错相反它会认为我
们是要隐式申明个全局变量这点定要注意  
 
   3、全局变量和局部变量  
  当JS解析器执行时首先就会在执行环境里构建个全局对象我们定义全局属性就是做为该对象属性读取在顶
层代码中我们使用this关键字和window对象都可以访问到它而体中局部变量只在执行时生成对象中存在执行完
毕时局部变量即刻销毁因此在设计中我们需要考虑如何合理声明变量这样既减小了不必要内存开销同时能很大
程度地避免变量重复定义而覆盖先前定义变量所造成Debug麻烦  
   4、变量作用域  
  任何语言中变量作用域都是个很关键细节JS中变量作用域相对和JAVA、C这类语言显得更自由个很大特征
就是JS变量没有块级作用域中变量在整个都中有效运行下面代码:  
 
  输出结果为0 1 0从上面就可以证明JS如果用var在体中声明变量那么此变量在且只在该体内有效运行结束
时本地变量即可销毁了  
  由于上面这个JS特性还有个关键问题需要注意此前直使用ActionScript虽然它和JS都是基于ECMA标准但在
这里还是略有区别例如下面代码:  
 
  你可能认为输出结果是0 0 1 0事实上在AS中确实是这样而在JS中输入却是0 und 1 0为何会这样了?刚才
我们说到了JS体中声明本地变量在整个中都有效因此在上面代码中var i = 1 ;在inner中都有效实际上显式声明
变量i是在预编译时就已经编译到对象中了区别于隐式声明变量在解释时才被定义为全局变量只是在outPut(i)时
还没有将它化变量此时本地变量i是未赋值变量而不是未定义变量因此输出了und上面代码等效于下面代码:  
 
function inner{  
var i; //定义但不赋值  
outPut(i); //undefiend  
i=1;  
outPut(i); //1  
}  
  为了避免上面这类问题因此在开始位置集中做声明是个极力推荐做法  
   5、基本类型和引用类型  
  JS区别于JAVA、C这些语言在变量申明时并不需要声明变量存储空间变量中所存储数据可以分为两类:基本
类型和引用类型其中数值、布尔值、null和und属于基本类型对象、和属于引用类型  
  基本类型在内存中具有固定内存大小例如:数值型在内存中占有 8个字节布尔值只占有个字节对于引用型数
据他们可以具有任意长度因此他们内存大小是不定因此变量中存储实际上是对此数据引用通常是内存地址或者
指针通过它们我们可以找到这个数据  
  引用类型和基本类型在使用行为上也有区别的处:  
 
  对基本类型b进行赋值时实际上是又开辟了块内存空间因此改变变量a值对变量b没有任何影响  
 
 
  上面是对引用类型变量赋值实际上他们传递是对内存地址引用因此对a_.gif' />和b_.gif' />存取实际上都是
操作同块内存区域如果希望重新分配内存空间存储引用型变量那么我就需要使用克隆思路方法或者自定义思路
方法来复制引用变量数据         


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值