JavaScript Perfection kill 测试及答案
JavaScript Perfection kill 测试及答案
发布时间:2016-12-30 来源:查字典编辑
摘要:下面是选择题:官方地址是http://perfectionkills.com/javascript-quiz/复制代码代码如下:1.(fun...

下面是选择题:官方地址是 http://perfectionkills.com/javascript-quiz/

复制代码 代码如下:

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; }

})();

Error (e.g. “Too much recursion”)

undefined

13.

function f(){ return f; }

new f() instanceof f;

true

false

14.

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

undefined

Error

下面是个人的解答:

复制代码 代码如下:

// Q1

(function(){

return typeof arguments; //很显然这里应该返回的是 "object"

})();

// Q2

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

typeof g(); //在ie下,这里返回的是 "number",但是在ff下,却是Error(g未定义)

// Q3

(function(x){

delete x; //应该说局部变量是不能被delete的

return x; //所以这里返回1

})(1);

/*

赠送:

delete与变量,有以下关系:

1、对象预定义的属性是不能被delete的;2、通过prototype指定的属性是不能delete的

//关于2,可以理解成只能删除动态附加给对象实例的属性?

3、var定义的(我个人理解是局部变量)是不能被delete的;4、function定义的变量及参数(相当于局变量)是不能被删除的。

关于delete的介绍,这里有:http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/

*/

// Q4

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

x; //很显然,x应该是undefined

// Q5

(function f(f){

return typeof f(); //这里的f指的是传进来的匿名函数,因此应该是 "number" (也就是1)

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

// Q6

var foo = {

bar: function() { return this.baz; },

//但是,调用后,这里的this指向了bar,而bar是没有baz属性的,因此是undefined

baz: 1

};

(function(){

return typeof arguments[0](); //arguments[0]是foo.bar

})(foo.bar);

// Q7

var foo = {

bar: function(){ return this.baz; }, //同第6题

baz: 1

}

typeof (f = foo.bar)();

// Q8

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

//js的,号操作符,被调用的是第2个函数,因此返回的是"number"

typeof f;

// Q9

var x = 1;

if (function f(){}) {

x += typeof f; //ie下是 1function、ff下是1undefined

}

x;

// Q10

var x = [typeof x, typeof y][1]; //x="undefined"

typeof typeof x; //x是字符串,因此应该是 "string"

// Q11

(function(foo){

return typeof foo.bar;

//非常隐暗的一道题,参数foo指向的是传进来的json对象,而json对象又有个foo属性。

//因此,此处如果是 typeof foo.foo.bar的话就是"number"

//但,参数foo本身是没有bar属性的,因此是 "undefined"

})({ foo: { bar: 1 } });

// Q12

(function f(){

function f(){ return 1; }

return f(); // 函数定义,后者覆盖前者,因此是 2

function f(){ return 2; }

})();

// Q13

function f(){ return f; }

new f() instanceof f;

//new f()实际上和f是同一个东西,都是function,因此,两者是==,因此是false

//如果function f(){return 1;},那么返回的是object

// Q14

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

//这样写就明白了 with(function(x,undefined){}){length;}

//而length,指是的function的形参个数,因此是 2

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类