测试一下你的javascript能力 14题,看你能对多少题目

来源:互联网 发布:经典黑客黑页源码 编辑:程序博客网 时间:2024/05/01 13:48
1.
       (function(){
           return typeof arguments;
      })();

 

 

 

2.  
     var f = function g(){ return 23; };
     typeof g();

 

 

 

3.
       (function(x){
             delete x; return x;
        })(1);

 

 

 

4.
       var y = 1, x = y = typeof x;
       x;

 

5.
        (function f(f){
            return typeof f();
        })(function(){ return 1; });

 

6.
       var foo = {
           bar: function() { return this.baz; },
           baz: 1
        };
       (function(){
             return typeof arguments[0]();
       })(foo.bar);

 

7.
      var foo = {
            bar: function(){ return this.baz; },
            baz: 1
       }
       typeof (f = foo.bar)();

 

8.
       var f = (function f(){ return "1"; }, function g(){ return 2; })();
       typeof f;

 

9.
       var x = 1;
       if (function f(){}) {
           x += typeof f;
       }
       x;

 

10.
       var x = [typeof x, typeof y][1];
       typeof typeof x;

 

11.
       (function(foo){
             return typeof foo.bar;
        })({ foo: { bar: 1 } });

 

12.
      (function f(){
             function f(){ return 1; }
             return f();
             function f(){ return 2; }
        })();

 

13.
       function f(){ return f; }
       new f() instanceof f;

 

14.
       with (function(x, undefined){}) length;

 

//-----------------------------------------------------------------------------------------------------------------------

答案

2,4,1,4,1,1,1,2,3,2,1,2,2,2

 

顺便写一下的理解   (个人理解 如有不对 请指正)

第一题

    (function(){
      return typeof arguments;
    })();

函数里面的arguments引用的是Arguments对象

返回的自然是 object

 

第二题目

  var f = function g(){ return 23; };
  typeof g();

这题目应该有歧异 ff下不允许这么定义 答案自然是Error

如果是ie下 返回23 就是num了

至于firefox为什么不能这么定义  原因不明白

 

第三题

     (function(x){
      delete x;
      return x;
    })(1);

不明白

 

第四题

var y = 1, x = y = typeof x;
x;

typeof返回的是字符串  x 为没有定义           typeof x返回'undefined'

x就是'undefined'

 

 

第五题

    (function f(f){
      return typeof f();
    })(function(){ return 1; }); 

f是一个函数  f()===1

  typeof 1 自然是"number"

 

第六题

    var foo = {
      bar: function() { return this.baz; },
      baz: 1
    };
    (function(){
      return typeof arguments[0]();
    })(foo.bar);

执行一个匿名函数  参数是foo.bar  

   可以看成这样

      (function(){
      return typeof arguments[0]();
    })( function() { return this.baz; });

   执行时就成了 直接执行这个函数 this指向了window

  所以是undefined

这题有点迷惑人 ,其实只要知道 在函数执行的时候有没有对象引用就行了,如果没有就指向window

 

var a = "B"
var c ={
 a : "A",
 c : function(){alert(this.a)} 
}
var b =c.c;
c.c();  //A c对象调用的c方法
b(); //B   b引用的c.c    c.c只是一个函数 可以看承是  b= function(){alert(this.a)}   然后只是直接执行一个函数 所以指向了window

 

 第七题

    var foo = {
      bar: function(){ return this.baz; },
      baz: 1
    }
    typeof (f = foo.bar)();

同第6题

 

第八题

    var f = (function f(){ return "1"; }, function g(){ return 2; })();
    typeof f;

    逗号运算返回的是第最后一个

    而这样写法本本身就是匿名函数的写法(fn)( )  Ps:如果里面的fn不是函数   会报告错误提示 fn不是函数

    函数执行完了以后 f===2    typeof 2 自然是 'number'

 

第九题

    var x = 1;
    if (function f(){}) {
      x += typeof f;
    }
    x;

  不明白

 

第十题

     var x = [typeof x, typeof y][1];
      typeof typeof x

     未定义的变量typeof后 都返回"undefined"

     x = ["undefined","undefined"][1]    即  x= "undefined"   px : var a=[1,2][0]====> x=0

    其实x已经是字符串了 typeof x  返回就是"string" 在来一typeof "string" 自然还是 "string"

 

第十一题

  (function(foo){
      return typeof foo.bar;
    })({ foo: { bar: 1 } });

参数是{ foo: { bar: 1 } }

即函数里面的foo === { foo: { bar: 1 }}

可见 foo只有一个  foo的属性     所以  foo.bar是undefined

 

 第十二题

    (function f(){
      function f(){ return 1; }
      return f();
      function f(){ return 2; }
    })();

在函数里面有2个f函数

因为预编译的关系 后面的一个f覆盖了前面的一个f

所以 返回的是2          查查预编译做了什么就好理解了

 

第十三题

    function f(){ return f; }
    new f() instanceof f;

 首先要知道new的过程即返回值

 如果返回的是函数  new后还是返回的那个函数 

 如果是其他类型 , new后返回的是一个 obj

 这里面的 f返回的是自己

  自己又是由Function new出来的

所以是false

可以测试一下

function f(){ return f; }
    alert(new f() instanceof Function);  //true
function ff(){}
alert(new ff() instanceof ff )//true

 

第十四题

with (function(x, undefined){}) length;
函数的length属性只指参数的个数

with 语句 为一个或一组语句指定默认对象

后面的length  即是 function()function(x, undefined){}.length

可以测试一下  alert(function(x, undefined){}.length)

 

 

原创粉丝点击