我对这段代码看的很是不舒服啊!!!
代码如下所示:(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对象到底还存在不存在?
大家帮帮忙分析一下这段代码啊!!!
谢谢!!!

解决方案 »

  1.   

    你没有在JSON中定义vs对象他怎么可能存在?<SCRIPT LANGUAGE="JavaScript">
    <!--
    (
    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>
      

  2.   


    (
    //这是一个匿名函数,在函数体内的this->window
    function(){
    alert(this===window);
    }
    )
    () //这里的括号是执行该匿名函数的意思
      

  3.   

    alert($mt().G('ver'));//这里能取到值,感觉好像vs对象存在一样。
    alert($mt().vs['ver']);//这里却不能取到值,感觉好像vs对象消失了。
    第一:
    G是$mt()中的方法,vs是G中是以变量的形式存在,
    而在第二句中,你把vs当成$mt的属性来访问,当然不存在了.因为vs只是个局部变量说白了就是vs充当的角色不同.
      

  4.   

    其实vs就是一个闭包变量
    虽然函数结束了 但是他还占着内存
    所以
    alert($mt().G('ver'));//这里能取到值,感觉好像vs对象存在一样。
    还是能找到那个匿名函数里面的vs的
    alert($mt().vs['ver']);//这里却不能取到值,感觉好像vs对象消失了。
    你这么写肯定访问不到的   vs的作用域是在函数里面的 外层的作用域哪会找的到了理解好闭包就好了
      

  5.   

    (function(){
        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的局部变量 因此无法在全局中找到值