Ext学习笔记之作用域
参考文献:http://extjs.com/learn/Tutorial:What_is_that_Scope_all_about
?????????????http://extjs.com/learn/Tutorial:What_is_that_Scope_all_about2
正文:????
1、Windows对象??????
?????一般情况,定义的函数 var?testvar?=?'window属性';
var?o3?=?{
???testvar:'3',
???testvar2:'3**',
???fun:function(){
??????alert('o3:?'+this.testvar);//'obj3'
??????var?inner?=?function(){
?????????alert('o3-inner:?'+this.testvar);//'window属性'
?????????alert('o3-inner:?'+this.testvar2);//undefined(未定义)
??????};
??????inner();
???}
};
o3.fun();
3、变量可见度
?????我们已经了解到,可在任何对象的外部,声明变量,或在全局的函数(函数也是变量的一种)也可以,更严格说,它们是全局对象window的属性。 全局变量在任何地方都可见;无论函数的内部还是外部。如果你在某一个函数内修改了一个全局变量,其它函数也会得知这个值是修改过的。 对象可以有它自己的属性(像上面的testvar),这些属性允许从内部或是外部均是可见的。
i?=?44;?
function?fn2()?{?
????var?i?=?55;?
????alert(i);?
}
fn2();?//55
alert(i);?//44声明在函数fn2的变量i是一个本地变量(局部变量),和等于44的全局变量i 44没什么关系。而后面的var?i?=?4;
var?j?=?5;
var?k?=?7;
var?fn?=?function(){
???var?i?=?6;
???k?=?8;//注意前面没有var?所以这句话的意思的把8赋予到变量k中去!
???alert(i);//6
???alert(j);//5
???alert(k+'-1');//8-1
???x?=?1;//这句的作用有两种情况,创建全部变量x或覆盖(overwrite)全部变量x
};
fn();
alert(k+'-2');//8-2?(注意不是7-2)
5、var?obj?=?{
????toString:function(){?return?'obj的范围内(作用域内)';},?//重写toString函数,方便执行console.log(this)时的输出
????func:?function(){
????????//?这里的函数直接从属与对象"object"
????????console.log(this);?
????????var?innerFunc?=?function(){
????????????//n这里的函数不是特定对象的直接成员,只是另外一个函数的变量而已
????????????console.log(this);?
????????};
????????innerFunc();
????}
};
obj.func();?
//?输出?"obj的范围内(作用域内)"
//?输出?"Window的一些相关内容"缺省下是这样调用一个参数的-但你也可以人为地改变this参数,只是语法上稍微不同。将最后一行的"obj.func();" 改为:obj.var?obj?=?{
????toString:function(){?return?'obj的范围内(作用域内)';},?//重写toString函数,方便执行console.log(this)时的输出
????func:?function(){
????????//?这里的函数直接从属与对象"object"
????????console.log(this);?
????????var?innerFunc?=?function(){
????????????//n这里的函数不是特定对象的直接成员,只是另外一个函数的变量而已
????????????console.log(this);?
????????};
????????innerFunc.call(this);
????}
};
obj.func();?
//?输出?"obj的范围内(作用域内)"
//?输出?"obj的范围内(作用域内)"
var?obj?=?{
????toString:function(){?return?'obj的范围内(作用域内)';},?//重写toString函数,方便执行console.log(this)时的输出
????func:?function(){
????????//?这里的函数直接从属与对象"object"
????????console.log(this);?
????????var?innerFunc?=?function(){
????????????//n这里的函数不是特定对象的直接成员,只是另外一个函数的变量而已
????????????console.log(this);?
????????};
????????innerFunc?=?innerFunc.createDelegate(this);?//?这里我们用委托的函数覆盖了原函数。
????????innerFunc();?//?按照一般的写法调用函数
????}
};
obj.func();?
//?输出?"obj的范围内(作用域内)"
//?输出?"obj的范围内(作用域内)"