14道js趣味题

第一题

(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 arguments0;
})(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

猜你喜欢

转载自blog.csdn.net/eebaicai/article/details/78991741