zoukankan      html  css  js  c++  java
  • kangax 的javascript谜题

    第一题

     (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) {}
    
  • 相关阅读:
    86. Partition List
    2. Add Two Numbers
    55. Jump Game
    70. Climbing Stairs
    53. Maximum Subarray
    64. Minimum Path Sum
    122. Best Time to Buy and Sell Stock II
    以场景为中心的产品设计方法
    那些产品经理犯过最大的错
    Axure教程:如何使用动态面板?动态面板功能详解
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1667565.html
Copyright © 2011-2022 走看看