Ruby's Louvre

每天学习一点点算法

导航

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) {}

posted on 2010-02-13 02:18  司徒正美  阅读(4418)  评论(17编辑  收藏  举报