kangax 的javascript謎題

來源:互聯網
上載者:User

第一題

 (function(){       return typeof arguments;    })();//問自動執行函數會返回什麼值
    // 就是考Arguments對象的typeof   // 看平時用firebug多不多了……

第二題

 var f = function g(){ return 23; };  typeof g();//問最後一行的執行結果
 //根據標準,命名函數運算式的函數名只對函數體內可見//因此報錯

第三題

   (function(x){    delete x;    return x;    })(1);//問自動執行函數會返回什麼值
 // 參數不可刪除//1

第四題

  var y = 1, x = y = typeof x;    x;//問最後一行的執行結果
  //聲明兩個變數x與y,y最初賦為1,x沒有賦值,預設賦給window的一個屬性undefined, //因此typeof undefined為"undefined",最後x= y= "undefined"

第五題

  (function f(f){    return typeof f();    })(function(){ return 1; });//問自動執行函數會返回什麼值
     //函數名被優先順序更高的參數名覆蓋了 --->    // (function (f){    //   return typeof f();    //  })(function(){ return 1; });    //typeof 1 ---> "number"

第六題

    var foo = {       bar: function() { return this.baz; },       baz: 1    };    (function(){       return typeof arguments[0]();    })(foo.bar);//問自動執行函數會返回什麼值
     //我們把下面那個自動執行函數分解一下    //var a = function(){    //  return typeof arguments[0]();    //};    //a(foo.bar)    //執行完arguments[0](),即得到this.baz    //由於this變數在此綁定失效,它指向window,window有bax變數嗎?    //沒有,返回"undefined"

第七題

    var foo = {      bar: function(){ return this.baz; },      baz: 1    }    typeof (f = foo.bar)();//問最後一行的執行結果
     //我們把最後一行分解一下    //window.f    //f= foo.bar    // f()    // typeof f()    //返回"undefined"

第八題

   var f = (function f(){ return "1"; }, function g(){ return 2; })();    typeof f;//問最後一行的執行結果
       //首先要理解分組選擇符,最後a會賦給什麼呢?      // var a = (1,2,3);      // alert(a) ---> 3      //那麼這就簡單了,f = function(){return 2};      //typeof f() ---> number

第九題

     var x = 1;      if (function f(){}) {        x += typeof f;      }      x;//問x的值
   //函式宣告只能裸露於全域範圍下或位於函數體中。      //從句法上講,它們不能出現在塊中,例如不能出現在      // if、while 或 for 語句中。因為塊只能包含語句,      //因此if()中的f函數不能當做函式宣告,當成運算式使用      //可能在先行編譯階段做了如下處理      //if((XXX = function(){}))      //因此我們是找不到f的      // 1undefined

第十題

     var x = [typeof x, typeof y][1];     typeof typeof x;//問最後一行的執行結果
    //數組其實就是這個樣子["undefined","undefined"]   //"string"

第十一題

   (function(foo){      return typeof foo.bar;    })({ foo: { bar: 1 } });//問自動執行函數會返回什麼值
    //分解一下   // var bb = { foo: { bar: 1 } }   //  (function(j){   //    return typeof j.bar   // })(bb)   // "undefined"   //注意那個對象只有foo屬性,沒有bar屬性

第十二題

    (function f(){      function f(){ return 1; }      return f();      function f(){ return 2; }    })();//問自動執行函數會返回什麼值
 //函式宣告會在先行編譯階段被提前//2

第十三題

 function f(){ return f; }  new f() instanceof f;//問這一行的值
       //由於函數f會返回自身,這個new 就形同虛設      //如果f的形式為 function f(){return this}或function f(){}就不一樣      //false

第十四題

 with (function(x, undefined){}) length;//問length的值為多少
   //with就是一個讀寫器,題意是取出函數的length屬性  //而函數的length就是指它形參的長度     //2

---------------------

第十五題

var a = (function () {    var A = null;    function A() {}    return A;})();//問自動執行函數會返回什麼值
 //由於函式宣告比var變數的優先順序高//函數內部在先行編譯後,是這個樣子//var A//functionA(){};//A= null//return A//null

第十六題

(function (A) {    var A = A;    function A() {}    return A;})(null);//問自動執行函數會返回什麼值
  //function A() {}

第十七題

var a = (function () {    return A;    if (true) {        function A($true) {}    } else {        function A($false) {}    }})();
  //FF報錯,IE返回unction A($false) {}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.