(function(){var d, a;var d1 = new Date();for(var i = 0; i < 1000000; i++) d = window.setTimeout;var d2 = new Date();for(var i = 0; i < 1000000; i++) a = setTimeout;var d3 = new Date();alert((d2 - d1) + " : " + (d3 - d2));})();

解决方案 »

  1.   

    这样你就好理解了:
    <script>(function(){var d, a;var d1 = new Date();for(var i = 0; i < 1000000; i++) d = window.setTimeout;var d2 = new Date();for(var i = 0; i < 1000000; i++) a =this.setTimeout;var d3 = new Date();alert((d2 - d1) + " : " + (d3 - d2));})();
    </script>
      

  2.   

    很明显我还不是很理解关于 #1 添加的this
      

  3.   


    var o = new Object;
    o.ss = function(){};
    var ss = o.ss;(function(){var d, a;var d1 = new Date();for(var i = 0; i < 1000000; i++) d = o.ss;var d2 = new Date();for(var i = 0; i < 1000000; i++) a = ss;var d3 = new Date();alert((d2 - d1) + " : " + (d3 - d2));})();
      

  4.   

    用oo.xx引用,会先寻找对象oo的地址,然后寻找oo.xx的地址,相当于进行了两次寻址操作(当然,前提是xx也是对象类型的)。
    直接用xx的形式寻找,只需要查找一次。
    在浏览器中,我们都是直接在window对象下进行操作的,window是可以省略的。
    而window常量,则是对window本身的引用,就是相当于 this.xx所以,一楼正解。
      

  5.   


    <script>
    var window = function(){
    //下面是window本身系统赋予的属性,你可以更改,但是一开始的值与你无关
    this.setTimeout = function(){};
    var window = this;
    var setTimeout = this.setTimeout;
    //你可以看做你所写的所有的代码都是这里开始往下的
    (function(){
    var d, a;
    var d1 = new Date();
    for(var i = 0; i < 1000000; i++) d = window.setTimeout;
    var d2 = new Date();
    for(var i = 0; i < 1000000; i++) a = setTimeout;
    var d3 = new Date();
    alert((d2 - d1) + " : " + (d3 - d2));
    })();
    //你的代码结束
    };
    new window(); //一开始系统会自动new一个window
    </script>