您的位置:首页 > Web前端 > JavaScript

javascript谜题

2016-02-02 08:14 495 查看
第一题

(
function
(){
return
typeof
arguments;
})();
//问自动执行函数会返回什么值
答案:就是考Arguments对象的typeof,看平时用firebug多不多了……

第二题

var
f
=
function
g(){
return
23;
};
typeof
g();
//问最后一行的执行结果
答案:根据标准,命名函数表达式的函数名只对函数体内可见,因此报错。

第三题

(
function
(x){
delete
x;
return
x;
})(1);
//问自动执行函数会返回什么值
答案:参数不可删除,所以返回的是1.

第四题

var
y
=1,x=y=
typeof
x;
x;
//问最后一行的执行结果
答案:声明两个变量x与y,y最初赋为1,x没有赋值,默认赋给window的一个属性undefined,因此typeof
undefined为"undefined",最后x=y="undefined"。

第五题

(
function
f(f){
return
typeof
f();
})(
function
(){
return
1;
});
//问自动执行函数会返回什么值
答案:函数名被优先级更高的参数名覆盖了--->

(function
(f){

return
typeoff();

})(function(){
return1;});

typeof
1--->"number"

第六题

var
foo
={
bar:
function
()
{
return
this
.baz;
},
baz:
1
};
(
function
(){
return
typeof
arguments[0]();
})(foo.bar);
//问自动执行函数会返回什么值
答案:我们把下面那个自动执行函数分解一下

var
a=function(){

return
typeofarguments[0]();

};

a(foo.bar);

执行完arguments[0](),即得到this.baz,由于this变量在此绑定失效,它指向window,window有bax变量吗?没有,返回"undefined".

第七题

var
foo
={
bar:
function
(){
return
this
.baz;
},
baz:
1
}
typeof
(f
=foo.bar)();
//问最后一行的执行结果
答案:我们把最后一行分解一下,window.f,f=
foo.bar,f(),typeof
f(),返回"undefined"。

第八题

var
f
=(
function
f(){
return
"1"
;
},
function
g(){
return
2;
})();
typeof
f;
//问最后一行的执行结果
答案:首先要理解分组选择符,最后a会赋给什么呢?

var
a=(1,2,3);

alert(a)
--->3

那么这就简单了,f =function(){return2};

typeof
f()--->number

第九题

var
x
=1;
if
(
function
f(){})
{
x
+=
typeof
f;
}
x;
//问x的值
答案:函数声明只能裸露于全局作用域下或位于函数体中。从句法上讲,它们不能出现在块中,例如不能出现在,if、while
或for语句中。因为块只能包含语句,

因此if()中的f函数不能当做函数声明,当成表达式使用,可能在预编译阶段做了如下处理,if((XXX
=function(){}))

因此我们是找不到f的,所以结果是:1undefined

第十题

var
x
=[
typeof
x,
typeof
y][1];
typeof
typeof
x;
//问最后一行的执行结果
答案:数组其实就是这个样子["undefined","undefined"],所以结果是:"string"

第十一题

(
function
(foo){
return
typeof
foo.bar;
})({
foo:{bar:1}});
//问自动执行函数会返回什么值
答案:分解一下

var
bb={foo:{bar:1}}

(function(j){

return
typeofj.bar

})(bb);

所以结果是:"undefined"

注意那个对象只有foo属性,没有bar属性

第十二题

(
function
f(){
function
f(){
return
1;
}
return
f();
function
f(){
return
2;
}
})();
//问自动执行函数会返回什么值
答案:函数声明会在预编译阶段被提前,结果是:2

第十三题

function
f(){
return
f;
}
new
f()
instanceof
f;
//问这一行的值
答案:由于函数f会返回自身,这个new就形同虚设,如果f的形式为
functionf(){returnthis}或functionf(){}就不一样,结果是:false

第十四题

with
(
function
(x,
undefined){})length;
//问length的值为多少
答案:with就是一个读写器,题意是取出函数的length属性,而函数的length就是指它形参的长度,所以length的值是2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: