小弟刚学js,请详解,逐步详解最好!<script type="text/javascript" language="javascript">
var value = 0;
var god = {
    value: 1,
    method: function(){
        var value = 2;
        var innerObj = {//问题1 这个中括号神马意思,相当于一个类名么?里面装变量,方法?
            value: 3, 
            innerMethod: function(){
                var value = 4;
                var that = this;
                var anotherMethod = function(){ 
                    alert(that.value);//这个等价于1处 值为3
                    alert(this.value);//这个是0 ,this指的是window
                    alert(value);      //这个等价于2处 值为4  问题2 不理解咩是闭包函数?
                }
                anotherMethod();
                alert(this.value);    //1处   问题3 这里的this为神马指到了上面的3,不是4?
                alert(value);         //2处         值为4 
            }
        };
        innerObj.innerMethod();
        alert(this.value);  // 值为1   这个跟上面是一个道理
        alert(value);                 // 值为2   这个也是跟上面一个道理
    },
    method2: function(){
        var value = 5;
        alert(this.value); 
        alert(value); 
        return function(){  
            alert(this.value); 
            alert(value); 
        };
    }()//这个括号是自己创建完就执行自身
};
god.method();
god.method2();  //问题4 这个方法可以得到值 0 5 1 5 解释?
</script>

解决方案 »

  1.   

    这是用JavaScript中对象直接量方式创建对象。
      

  2.   

    这是用JavaScript中对象直接量方式创建对象。
      

  3.   

    <script type="text/javascript" language="javascript">
    var value = 0;
    var god = {
        value: 1,
        method: function(){
            var value = 2;
            var innerObj = {//这是一个对象,并不是类
                value: 3, 
                innerMethod: function(){
                    var value = 4;
                    var that = this;
                    var anotherMethod = function(){ 
                        alert(that.value);//这个等价于1处 值为3
                        alert(this.value);//这个是0 ,this指的是window
                        alert(value);      //这里是4很合逻辑啊,有什么不对吗?
                    }
                    anotherMethod();
                    alert(this.value);    //这里的this指的是god这个对象,对象的value属性是3啊
                    alert(value);         //你上面不是声明了 value=4吗
                }
            };
            innerObj.innerMethod();
            alert(this.value);             // 值为1   这个跟上面是一个道理
            alert(value);                 // 值为2   这个也是跟上面一个道理                        
        },
        method2: function(){
            var value = 5;
            alert(this.value); //window的value
            alert(value); // 上面声明的value
            return function(){          
                alert(this.value); //god以象的value
                alert(value); //闭包的value
            };
        }()//这个括号是自己创建完就执行自身
    };
    god.method();
    god.method2();  //问题4 这个方法可以得到值 0 5 1 5 解释?
    </script>
      

  4.   

    <script type="text/javascript" language="javascript">
    var value = 0;
    var god = {
        value: 1,
        method: function(){
            var value = 2;
            var innerObj = {//这是一个对象,并不是类
                value: 3, 
                innerMethod: function(){
                    var value = 4;
                    var that = this;
                    var anotherMethod = function(){ 
                        alert(that.value);//这个等价于1处 值为3 因为var that = this;将this转变
                        alert(this.value);//这个是0 ,this指的是window
                        alert(value);      //这个看下js的域
                    }
                    anotherMethod();
                    alert(this.value);    //这里的this指的是god这个对象,对象的value属性是3啊
                    alert(value);         //你上面不是声明了 value=4吗
                }
            };
            innerObj.innerMethod();
            alert(this.value);             // 值为1   这个跟上面是一个道理
            alert(value);                 // 值为2   这个也是跟上面一个道理                        
        },
        method2: function(){
            var value = 5;
            alert(this.value); //window的value
            alert(value); // 上面声明的value
            return function(){          
                alert(this.value); //god以象的value
                alert(value); //闭包的value
            };
        }()//这个括号是自己创建完就执行自身
    };
    god.method();
    god.method2();  //问题4 这个方法可以得到值 0 5 1 5 解释?我的理解是闭包的作用。你搜下闭包
    </script>
      

  5.   

    你要搞懂这个,要先弄清楚几个问题
    1.
    var obj = {};
    这个代码,效果等同于
    var obj = new Object();
    原本是可以看成一个对象的。
    但是由于最新的ECMAScript5标准(有了Object.create方法之后),他其实又可以看成是一个类。不过一般情况下你可以看成是一个对象,或者是单例模式中的单例对象。2.this作用链
    看以下代码
        var value = 0;
        
        var obj = {
            value: 1,
            method: function() {
                var handler = function() {
                    alert(this.value);
                };
                            // 0
                handler();
            }
        };
        obj.method();
    这里的this,之所以指向了全局的window["value"],是因为this链断了。在调用handler的时候,this无法指向obj。再看以下代码:
        var value = 0;
        
        var obj = {
            value: 1,
            method: function() {
                this.handler = function() {
                    alert(this.value);
                };
                            // 1
                this.handler();
            }
        };
        obj.method();
    这里,打印出1,是因为this.value在执行的时候,向上查找,正好连到了this.handler,而this.handler指向obj。所以能解析出1综上,来回答你的所有问题
    问题1:可以看成是对象,也可以看成是类。看成是类的时候用Object.create实例化。
    问题2:alert(value)的这个调用的确是用了闭包
    问题3:看上面2的解释
    问题4:首先解释两个5,都是闭包得到最近的var value的值。所以都是5
    之所以第一次为0,原理和上面2的第一段代码一样。第二次为1,原理和第二段代码一样。第一次执行的时候并没有绑定在对象上,是匿名执行的。第二次是绑定在对象上执行。