javascript对象小探之六——全局变量、变量提升和this

一全局变量

    windowjs运行的全局环境,定义全局变量其实就是在为window添加属性。定义全局变量的三种方式: 

1、简单点,<script>下直接var a;

2、直接地,window.a;

3、如果没有使用var关键字来声明的话,那这个变量必须位于使用之前就赋值,也会作为全局变量添加到window对象中。代码如下:

 
 (function() {    
     if (true) {  
     		alert(h());     //不会执行成功,因为无var声明必须位于使用之前赋值
                h = function() {return false;}; 
      } 
     alert(h());  

 })();

所以,尽管平时我们定义变量可以省略var,但是易出现意想不到的情况。所以先声明后使用,好习惯!

千万要注意,不使用var不一定就是全局变量了,因为遇到的情况可能是变量声明提升

如代码:

 
 
  1. alert(b);
  2. alert("成功了!");
变量b前后都没声明,那么不会执行成功,不会弹出警告框,并且后面的语句也不会执行。但如果在调用变量之后补充了声明,那么就弹出警告,并且会顺利执行,如:
 
 
  1. alert(b);//返回undefined
  2. var b='kk';
  3. alert(b);//返回kk
虽然之前没有声明变量,但随后进行了声明,那么JavaScript执行器会将所有的变量声明一道语句顶部,这就是变量声明提升。

如果是在函数内声明局部变量,那么就会将变量声明提升到函数体内的最顶部,不会被当作全局变量了。千万注意以下3点:

1、如果全局变量和变量声明提升同时存在,则在变量声明提升作用域内,变量声明提升占主。如下面代码:

 
w=9;
function foo() {
    alert(w);	//undefined
    var w;		//undefined
    alert(w);
}
foo();
alert(w);		//9
  

2、要注意,变量声明提升的对象不要是DOM对象

 
 
  1. alert(event); //IE,FF,CH,OP返回undefined,而不是中断执行

3、条件语句特别注意。 

代码1:

 
    f = function() {return true;}; 		//函数可以这样申明,变量也可以,但必须都赋值且位于使用之前
    g = function() {return false;};
   (function() {  
 	  if (g() && [] !== [] ) {  	       //除了FF,判断语句调用条件块内声明的变量或函数,也会造成变量提升,提升到与条件语句块同级。
     		 f = function() {return false;};   
   	  	 function g() {return true;}  
  		 } 
	 alert(f());	//FF:true、Other:false
         alert(g());    //FF:false、other:true

   })();  

alert(f());        //FF:true、Other:false
alert(g());        //false
   

代码2:

if (!("a" in window)) {      //提升到与if同级的window作用域
    var a = 1;
}

alert(a);     //undeinfed
代码3:
alert(typeof foo); // "undefined",函数声明也被提升了,不是当成全局变量

var foo = function () {
    // body...
};
代码4:
function test() {
    alert("1");
}

test();

function test() {
    alert("2");
}

test();
两次都是2,所以直接使用alert好过定义相同函数。




二、this

js中,this引用的是函数据以执行操作的对象,也就是函数在执行时所处的作用域。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值