在线测试,参考网页http://perfectionkills.com/javascript-quiz/

答案位于文章底部

1. 

(function(){    
  return typeof arguments;
  })();
  1. “object”
  2. “array”
  3. “arguments”
  4. “undefined”



问自动执行函数会返回什么值?



// 就是考Arguments对象的typeof,看平时用firebug多不多了……   




2.

var f = function g(){ return 23; };
  typeof g();
  1. “number”
  2. “undefined”
  3. “function”
  4. Error



//问最后一行的执行结果



 



//根据标准,命名函数表达式的函数名只对函数体内可见,因此报错




3.

(function(x){
    delete x;
    return x;
  })(1);
  1. 1
  2. null
  3. undefined
  4. Error



//问自动执行函数会返回什么值 



// 参数不可删除  ,1




4.

var y = 1, x = y = typeof x;
  x;
  1. 1
  2. “number”
  3. undefined
  4. “undefined”




//问最后一行的执行结果



//声明两个变量x与y,y最初赋为1,x没有赋值,默认赋给window的一个属性undefined,



//因此typeof undefined为"undefined",最后x= y= "undefined"




5.

(function f(f){
    return typeof f();
  })(function(){ return 1; });
  1. “number”
  2. “undefined”
  3. “function”
  4. Error




//问自动执行函数会返回什么值 



//函数名被优先级更高的参数名覆盖了 -,



(function (f){  



return  typeof  f(); 



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



typeof  1 ---> "number"




6.

var foo = {
    bar: function() { return this.baz; },
    baz: 1
  };
  (function(){
    return typeof arguments[0]();
  })(foo.bar);
  1. “undefined”
  2. “object”
  3. “number”
  4. “function”




//动执行函数会返回什么值 ?



我们把下面那个自动执行函数分解一下 



var a = function(){ 



return  typeof  arguments[0]();



}; 



a(foo.bar)



执行完arguments[0](),即得到 this .baz



由于 this 变量在此绑定失效,它指向window,window有bax变量吗?  没有,返回 "undefined"




7.

var foo = {
    bar: function(){ return this.baz; },
    baz: 1
  }
  typeof (f = foo.bar)();
  1. “undefined”
  2. “object”
  3. “number”
  4. “function”



//后一行的执行结果?



我们把最后一行分解一下 



window.f 



f= foo.bar 



f() 



typeof  f() 



返回 "undefined"




8.

var f = (function f(){ return "1"; }, function g(){ return 2; })();
  typeof f;
  1. “string”
  2. “number”
  3. “function”
  4. “undefined”




//最后一行执行结果?



首先要理解分组选择符,最后a会赋给什么呢? 



var a = (1,2,3); 



alert(a) ---> 3 



那么这就简单了,f = function(){ return  2};



typeof  f() ---> number




9.

var x = 1;
  if (function f(){}) {
    x += typeof f;
  }
  x;
  1. 1
  2. “1function”
  3. “1undefined”
  4. NaN



//x的值



函数声明只能裸露于全局作用域下或位于函数体中。 



从句法上讲,它们不能出现在块中,例如不能出现在  if while  for  语句中。因为块只能包含语句, 



因此 if ()中的f函数不能当做函数声明,当成表达式使用



可能在预编译阶段做了如下处理 



if ((XXX = function(){})) 



因此我们是找不到f的 , 1,undefined




10.

var x = [typeof x, typeof y][1];
  typeof typeof x;
  1. “number”
  2. “string”
  3. “undefined”
  4. “object”



//最后一行执行结果?



数组其实就是这个样子[ "undefined" , "undefined" ]



"string"




11.

(function(foo){
    return typeof foo.bar;
  })({ foo: { bar: 1 } });
  1. “undefined”
  2. “object”
  3. “number”
  4. Error



//自动执行函数的返回值?



分解一下 



var bb = { foo: { bar: 1 } } 



(function(j){ 



return  typeof  j.bar 



})(bb) 



"undefined" 



注意那个对象只有foo属性,没有bar属性




12.

(function f(){
    function f(){ return 1; }
    return f();
    function f(){ return 2; }
  })();
  1. 1
  2. 2
  3. Error (e.g. “Too much recursion”)
  4. undefined



//自动执行函数的返回值?



函数声明会在预编译阶段被提前 ,2




13.

function f(){ return f; }
  new f() instanceof f;
  1. true
  2. false


//最后一行结果?



由于函数f会返回自身,这个 new  就形同虚设



如果f的形式为 function f(){ return  this }或function f(){}就不一样



false




14.

with (function(x, undefined){}) length;
  1. 1
  2. 2
  3. undefined
  4. Error



//求length的值?



with就是一个读写器,题意是取出函数的length属性



而函数的length就是指它形参的长度 ,2 




答案:ADADA  AABCB  ABB