正好以前也看过一篇,就借花献佛拿出来分享一下 http://perfectionkills.com/javascript-quiz/
附带了自己的理解,答案有争议的地方欢迎大家指出
|
2
3
4
|
(function(){
return typeof arguments;
})(); |
题目二
|
2
3
|
var f = function g(){ return 23; };
typeof g();
|
因为function g(){ return 23; }是函数表达式,事实上只有事一个名字,不是一个函数声明
函数实际上是绑定到变量f,不是g.
指定的标识符在函数表达式虽然有其用途:堆栈跟踪是清晰而不是充斥着无名的函数,你可以有一个匿名函数递归调用本身不使用argument.callee
附非常详细的帖子函数表达式
http://kangax.github.io/nfe/
题目三
|
2
3
4
5
|
(function(x){
delete x;
return x;
})(1); |
参数不可删除
见我发过的帖子(js中的delete定义)
http://www.cnblogs.com/aaronjs/articles/3148934.html
国外的帖子(理解删除)
http://perfectionkills.com/understanding-delete/
题目四
|
2
3
|
var y = 1, x = y = typeof x;
x; |
题目五
|
2
3
4
|
(function f(f){
return typeof f();
})(function(){ return 1; });
|
第一部分
var baz = function(){ return 1; };
第二部分
(function f(f){
return typeof f();
})(baz);
在这里,函数f接受一个参数是另一个函数,f函数内部执行这个实参函数并且返回类型
无论是从调用该函数返回,即使参数名称f与函数名冲突,函数接受本身作为自己的参数,然后调用,此时就看谁更具有更高的优先级了,显然,参数的优先级更高,所以实际执行的是return typeof 1
题目六
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
题目七
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
题目八
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
题目九
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
题目十
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
题目十一
function f(){ return f; }
new f() instanceof f;
题目十二
var x = [typeof x, typeof y][1]; typeof typeof x;
答案
这题目比较简单,注意下返回类型即可 x = [,][1]; 即 x = typeof y = 'undefind'. typeof 返回的是string类型就可以了 typeof typeof必然就是'string'了.