Javascript Quiz

dh20156 2010-12-25 02:14:05
加精
有段时间没来冒泡了,前些天,同事发了一个JavaScript Quiz的链接,也解答了一下,下面贴出相应的题目及解答思路。顺便祝大家圣诞快乐!

 1.

    (function(){ 

      return typeof arguments;

    })();

 

A “object”

B “array”

C “arguments”

D “undefined” 

 

答案为:A

arguments是由控制器进入到function执行环境时创建的对象,其[[prototype]]为Object.prototype,参见ES262-3 10.1.6

 

2.

    var f = function g(){ return 23; };

    typeof g();

 

A “number”

B “undefined”

C “function”

D Error

 

答案为:D和A都可以,需要区别浏览器,如果按照ES262的标准实现,应该是D

参见:ES262-3 13 Note

http://www.jslab.org.cn/?tag=FunctionDeclarationaAndFunctionExpression

 

3.

    (function(x){

      delete x;

      return x;

    })(1);

 

A 1

B null

C undefined

D Error 

 

答案为:A

参见ES262-3

11.4.1, The delete Operator, If Type(Evaluate(UnaryExpression)) is not Reference, return true.

8.7, A Reference is a reference to a property of an object. A Reference consists of two components, the base object and the property name.

附加信息:

8.6.1,  DontDelete, Attempts to delete the property will be ignored. See the description of the delete operator in section 11.4.1.

10.1.6,活动对象中的arguments属性为{DontDelete}

 

4.

    var y = 1, x = y = typeof x;

    x;

 

A 1

B “number”

C undefined

D “undefined”

 

答案为:D

这里容易将C和D搞混,首先,理解var的预编译,所有var声明会在控制器进入到执行环境时做的第一步事情,创建活动对象时进行处理,对应值都为undefined,接下来才是赋值操作.

var y = 1, x = y = typeof x;等同于

var y,x;

y=1;x=(y = typeof x);前面的y=1;可以忽略,所以只剩下x = (y = typeof x);

x为undefined,经过typeof运算后,返回"undefined", typeof运算符返回结果都为string类型

参见:ES262-3 11.4.3

 

5.

    (function f(f){ 

      return typeof f(); 

    })(function(){ return 1; });

 

A “number”

B “undefined”

C “function”

D Error 

 

答案为:A

作用域问题,标识符查找的顺序,控制器进入函数时,活动对象将创建,arguments对象和其他声明都会被初始化到该对象,该活动对象会被插入到作用域链的顶端。

参见:ES262-3 10.2.3

 

6.

    var foo = { 

      bar: function() { return this.baz; }, 

      baz: 1

    };

    (function(){ 

      return typeof arguments[0]();

    })(foo.bar);

 

A “undefined”

B “object”

C “number”

D “function” 

 

答案为:A

this的标识问题,注意arguments[0]();其实就是要去执行function() { return this.baz; },此时,this为global Object,即window,而window上木有baz属性或变量。

参见:ES262-3 10.1.7 ~ 10.2.3
...全文
3636 110 打赏 收藏 转发到动态 举报
写回复
用AI写文章
110 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunxingbao 2013-04-19
  • 打赏
  • 举报
回复
第6题解释有问题吧 不该是window吧你声明一个 baz 结果还是undefined啊 他的this上下文在bar内部
pillar0514 2011-04-26
  • 打赏
  • 举报
回复
这套题充分证明了以正确的方式去编程有多重要。
xinqinglhj 2010-12-31
  • 打赏
  • 举报
回复
比较经典。

呵呵。
DAVID_DEEYE 2010-12-31
  • 打赏
  • 举报
回复
先顶一个,起步中。。。。
dh20156 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 98 楼 sheay 的回复:]

呵呵,还好,大部分我都做对了,唯一一个我不能理解的是第9题,不知为何f函数未被定义。
var x = 1;

if (function f(){}) {

x += typeof f;

}

x;

忘高手指教
[/Quote]

if(expression){......}

所以又回到了函数声明与函数表达式的问题。
暗夜螃蟹 2010-12-31
  • 打赏
  • 举报
回复
happy new year
peng13482556193 2010-12-31
  • 打赏
  • 举报
回复
还没用过,路过,顶一下!
yfxucn 2010-12-31
  • 打赏
  • 举报
回复
分页了?
aj_zLc 2010-12-31
  • 打赏
  • 举报
回复
及格及格,还需努力啊
sheay 2010-12-31
  • 打赏
  • 举报
回复
呵呵,还好,大部分我都做对了,唯一一个我不能理解的是第9题,不知为何f函数未被定义。
var x = 1;

if (function f(){}) {

x += typeof f;

}

x;

忘高手指教
  • 打赏
  • 举报
回复
哦了,谢谢啊
kai_Q 2010-12-30
  • 打赏
  • 举报
回复

我也来顶一下
guolingguo 2010-12-30
  • 打赏
  • 举报
回复
多多努力,赶上超人
Exodia 2010-12-29
  • 打赏
  • 举报
回复
3、7错了,标记下
  • 打赏
  • 举报
回复
悲剧了,只能答对两三个,还有一两个看不懂
yzzchen 2010-12-29
  • 打赏
  • 举报
回复
saffffffffffffffffffffffffffffffffffffffffffff
laowanghahaha 2010-12-29
  • 打赏
  • 举报
回复
不错,很好!
softwarexiang120 2010-12-29
  • 打赏
  • 举报
回复
不错!
aguang423 2010-12-28
  • 打赏
  • 举报
回复
我看看那就好
  • 打赏
  • 举报
回复
好复杂哦
加载更多回复(50)

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧