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

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)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值