我对这段代码看的很是不舒服啊!!!
代码如下所示:(function(){
var spt='aspx', w=this,ver='2.0',vs={};
var o=w.$mt=function(){
return o.p
};
var m=o.p={
S:function(n, v){//设置公共变量
vs[n]=v
}, G:function(n){//取公共变量
return vs[n];}}
m.S('ver',ver);
})();
alert($mt().G('ver'));//这里能取到值,感觉好像vs对象存在一样。
alert($mt().vs['ver']);//这里却不能取到值,感觉好像vs对象消失了。还有就是这种函数定义方法看得很不舒服啊!!!!
vs对象到底还存在不存在?
大家帮帮忙分析一下这段代码啊!!!
谢谢!!!
代码如下所示:(function(){
var spt='aspx', w=this,ver='2.0',vs={};
var o=w.$mt=function(){
return o.p
};
var m=o.p={
S:function(n, v){//设置公共变量
vs[n]=v
}, G:function(n){//取公共变量
return vs[n];}}
m.S('ver',ver);
})();
alert($mt().G('ver'));//这里能取到值,感觉好像vs对象存在一样。
alert($mt().vs['ver']);//这里却不能取到值,感觉好像vs对象消失了。还有就是这种函数定义方法看得很不舒服啊!!!!
vs对象到底还存在不存在?
大家帮帮忙分析一下这段代码啊!!!
谢谢!!!
<!--
(
function(){
var spt='aspx', w=this,ver='2.0',vs={};
var o=w.$mt=function(){
return o.p
};
var m=o.p={
S:function(n, v){
vs[n]=v //因为这里设置了vs的值,所以才能在G中返回vs
},
G:function(n){
return vs[n];
},
vs:{ver:"ver"} //定义vs中ver的值
}
m.S('ver',ver);
}
)();
alert($mt().G('ver'));//这里能取到值,感觉好像vs对象存在一样。
alert($mt().vs['ver']);//想取vs的值需要定义
//-->
</SCRIPT>
(
//这是一个匿名函数,在函数体内的this->window
function(){
alert(this===window);
}
)
() //这里的括号是执行该匿名函数的意思
alert($mt().vs['ver']);//这里却不能取到值,感觉好像vs对象消失了。
第一:
G是$mt()中的方法,vs是G中是以变量的形式存在,
而在第二句中,你把vs当成$mt的属性来访问,当然不存在了.因为vs只是个局部变量说白了就是vs充当的角色不同.
虽然函数结束了 但是他还占着内存
所以
alert($mt().G('ver'));//这里能取到值,感觉好像vs对象存在一样。
还是能找到那个匿名函数里面的vs的
alert($mt().vs['ver']);//这里却不能取到值,感觉好像vs对象消失了。
你这么写肯定访问不到的 vs的作用域是在函数里面的 外层的作用域哪会找的到了理解好闭包就好了
var spt='aspx', w=this,ver='2.0',vs={};//这里的this就相当于window,$mt也就变成了全局变量,vs属于这个方法的局部变量
var o=w.$mt=function(){//相当于window.$mt=function(){ return o.p };
return o.p
};
var m=o.p={//相当于window有了S和G方法
S:function(n, v){//设置公共变量
vs[n]=v
}, G:function(n){//取公共变量
return vs[n];}}
m.S('ver',ver);
})();
alert($mt().G('ver'));//因此全局变量的$mt拥有运行后的值
alert($mt().vs['ver']);//vs属于new function的局部变量 因此无法在全局中找到值