有段时间没来冒泡了,前些天,同事发了一个JavaScript Quiz的链接,也解答了一下,下面贴出相应的题目及解答思路。顺便祝大家圣诞快乐! 1. (function(){ return typeof arguments; })(); A “object”B “array”C “arguments”D “undefined” 答案为:Aarguments是由控制器进入到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 Notehttp://www.jslab.org.cn/?tag=FunctionDeclarationaAndFunctionExpression 3. (function(x){ delete x; return x; })(1); A 1B nullC undefinedD Error 答案为:A参见ES262-311.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 1B “number”C undefinedD “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” 答案为:Athis的标识问题,注意arguments[0]();其实就是要去执行function() { return this.baz; },此时,this为global Object,即window,而window上木有baz属性或变量。参见:ES262-3 10.1.7 ~ 10.2.3
解决方案 »
- extjs 4.1.1 controller 监听button的问题
- Extjs中editorgridpanel与combobox组合的问题
- 如何将下面的xml文件转换成json格式??急
- 怎么讲搜索框移动到文字后面?
- 百度空间里添加新分类,最后的值怎么传?太快,我抓不到。
- 奇怪好奇怪,谁能帮我分析一下,在线等
- @@@@@@@@@@@@在线等待,急用,请帮忙@@@@@@@@@@@
- NetScape下请问如何得到一个元素(如图片或者鼠标什么的)的绝对位置?
- 我在学习使用style过程中,编写以下这个网页但是总是出错。
- 定位问题
- AJAX小聊天室火狐不兼容
- 如何实现简单带有指向点击处箭头的说明窗口
不过个人以为了解下语法就可以了 没必要在 这样的表达方式上面 化太多时间去深究
写代码关键是 良好的结构 可读 可维护 可扩展第2题 var f=function g(){..} 难道不应该写成 var f,g;f=g=function(){}
第3题 很难理解 为什么要删除形参
第4,10题 为什么不写成 var x,y ;y=...;x=...; 先声明后赋值 要分开写
第6,7,8,9,12,13题 歧义表达(上午我说晚上请你看电影,下午我说晚上请你吃饭,晚上你到底准备和我干什么呢)
以上都是浮云
最重要的还是要学解决问题的能力,即使google,baidu之也是一种能力
楼主贴的这些题,实际Javascript编程中大家很少会走近这些陷阱,即使靠近也可以绕道。
不过还是要支持楼主一下的,用这些题验证一下对Javascript的理解也还是可以的。
var x = 1; if (function f(){}) { x += typeof f; } x;忘高手指教