Javascript作用域

var是js的一种变量声明,而JS正因为其自由度而被追捧,它可以和VB一样不需要声明而直接使用,但你知道声明与不声明的区别吗?

 

var 变量名 与直接使用不声明 在一些场合是完全一样的

 

首先,我们可以把一个不声明的变量及声明的变量做类型测试都是undefined, 其次应用得到的类型均为 VT_EMPTY

 

不过当你用它写复杂的类时你会发现,行为有时候莫明其妙,这时候你就应该找找你的var了

 

var只在作用域有效,也就是如果你不增加引用那么在超出作用域,它就会释放,但有一些情况需要说明,那就是有时最小作用域为函数体.

 

function  sub(x){

/*var */ _x = x;

function internal_dec(){return --_x;}

}

plus.prototype={

dec:function(){return internal_dec()}

}

 

x = new sub(5);

x.dec();//4

y = new sub(6);

x.dec();//5

 

正如所见到的,它现在是一个全局变量,只有它存在于一个命名空间内.

 

要得到预期的行为,只需要加上var

 

 

下一个作用域就是 function;

我们经常会看到function.prototype.xx 它针对实例

function.xx 它是一个静态函数,也就是说它是一个全局函数,而且它引用的this并非你new的实例

还有一种是我经常用的,obj.xx = function; 这是针对实例的一个扩展,也就是它可以很好地使用this来调用本实例对象,有时候你并不希望所有的实例都具有一些方法,当然你可能会定义另一种类型,使用apply去继承,那就不在讨论之列了.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值