`
scomouse
  • 浏览: 14718 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
1.
(function(){
return typeof arguments;
})();
  • “object”
  • “array”
  • “arguments”
  • “undefined”

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

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

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

5.
(function f(f){
return typeof f();
})(function(){ return 1; });
  • “number”
  • “undefined”
  • “function”
  • Error

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

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

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

9.
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
  • 1
  • “1function”
  • “1undefined”
  • NaN

10.
var x = [typeof x, typeof y][1];
typeof typeof x;
  • “number”
  • “string”
  • “undefined”
  • “object”

11.
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
  • “undefined”
  • “object”
  • “number”
  • Error

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

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

14.
with (function(x, undefined){}) length;
  • 1
  • 2
  • undefined
  • Error

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

答案

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)

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics