在线测试,参考网页http://perfectionkills.com/javascript-quiz/
答案位于文章底部
1.
(function(){
return typeof arguments;
})();
- “object”
- “array”
- “arguments”
- “undefined”
问自动执行函数会返回什么值?
// 就是考Arguments对象的typeof,看平时用firebug多不多了……
|
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
//问自动执行函数会返回什么值
// 参数不可删除 ,1
|
4.
var y = 1, x = y = typeof x;
x;
- 1
- “number”
- undefined
- “undefined”
//问最后一行的执行结果
//声明两个变量x与y,y最初赋为1,x没有赋值,默认赋给window的一个属性undefined,
//因此typeof undefined为"undefined",最后x= y= "undefined"
|
5.
(function f(f){
return typeof f();
})(function(){ return 1; });
- “number”
- “undefined”
- “function”
- Error
//问自动执行函数会返回什么值
//函数名被优先级更高的参数名覆盖了 -,
(function (f){
return
typeof
f();
})(function(){
return
1; });
typeof
1 --->
"number"
|
6.
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
- “undefined”
- “object”
- “number”
- “function”
//动执行函数会返回什么值 ?
我们把下面那个自动执行函数分解一下
var a = function(){
return
typeof
arguments[0]();
};
a(foo.bar)
执行完arguments[0](),即得到
this
.baz
由于
this
变量在此绑定失效,它指向window,window有bax变量吗? 没有,返回
"undefined"
|
7.
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
- “undefined”
- “object”
- “number”
- “function”
//后一行的执行结果?
我们把最后一行分解一下
window.f
f= foo.bar
f()
typeof
f()
返回
"undefined"
|
8.
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
- “string”
- “number”
- “function”
- “undefined”
//最后一行执行结果?
首先要理解分组选择符,最后a会赋给什么呢?
var a = (1,2,3);
alert(a) ---> 3
那么这就简单了,f = function(){
return
2};
typeof
f() ---> number
|
9.
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
- 1
- “1function”
- “1undefined”
- NaN
//x的值
函数声明只能裸露于全局作用域下或位于函数体中。
从句法上讲,它们不能出现在块中,例如不能出现在
if
、
while
或
for
语句中。因为块只能包含语句,
因此
if
()中的f函数不能当做函数声明,当成表达式使用
可能在预编译阶段做了如下处理
if
((XXX = function(){}))
因此我们是找不到f的 , 1,undefined
|
10.
var x = [typeof x, typeof y][1];
typeof typeof x;
- “number”
- “string”
- “undefined”
- “object”
//最后一行执行结果?
数组其实就是这个样子[
"undefined"
,
"undefined"
]
"string"
|
11.
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
- “undefined”
- “object”
- “number”
- Error
//自动执行函数的返回值?
分解一下
var bb = { foo: { bar: 1 } }
(function(j){
return
typeof
j.bar
})(bb)
"undefined"
注意那个对象只有foo属性,没有bar属性
|
12.
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
- 1
- 2
- Error (e.g. “Too much recursion”)
- undefined
//自动执行函数的返回值?
函数声明会在预编译阶段被提前 ,2
|
13.
function f(){ return f; }
new f() instanceof f;
- true
- false
//最后一行结果?
由于函数f会返回自身,这个
new
就形同虚设
如果f的形式为 function f(){
return
this
}或function f(){}就不一样
false
|
14.
with (function(x, undefined){}) length;
- 1
- 2
- undefined
- Error
//求length的值?
with就是一个读写器,题意是取出函数的length属性
而函数的length就是指它形参的长度 ,2
|
答案:ADADA AABCB ABB