Posted in Javascript onMarch 23, 2010
下面是选择题:官方地址是 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 Perfection kill 测试及答案
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@