//-----------------------------------------------------------------------------------------------------------------------
答案
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)