作家
登录

一些javascript一些题目的解析

作者: 来源:www.28hudong.com 2013-03-30 01:05:41 阅读 我要评论

http://perfectionkills.com/javascript-quiz/   下面是我关于这些题目的,一些关于自己的理解. 如果有什么不同的意见或者见解,欢迎拍砖. 复制代码 代码如下: (function(){ return typeof arguments; })(); 这个题目比较简单, 只要大家不觉得 arguments 是 array ,就可以了. 返回是 object. 复制代码 代码如下: var f = function g(){ return 23; }; typeof g(); 翻翻 aiming 的书,会发现里面对function 的解释, 以及几种创建方式有比较完全的描叙的, 这个陷阱,在下面的多个题目中有出现. 小心. 返回是 undefined. 复制代码 代码如下: (function(x){ delete x; return x; })(1); Javascript 的delete, 删除的不是引入或者指向的对象. 而是对象本身. /* 资料   delete 运算符     从对象中删除一个属性,或从数组中删除一个元素。   delete expression     expression 参数是一个有效的 JScript 表达式,通常是一个属性名或数组元素 所以,这里的形参的改变, 与他是没关系的. */ 关于delete的具体解析,有园友给出了那个题目部分原本的解释,粗心了没去看,呵呵 http://perfectionkills.com/understanding-delete/ 返回 1. 复制代码 代码如下: var y = 1, x = y = typeof x; x; 这个部分有个小陷阱. 呵呵. x= undefined , 大家知道. 然后 typeof x, 实际上也就是 typeof "undefined". 呵呵 返回的,当然是 string 了. 复制代码 代码如下: (function f(f){ return typeof f(); })(function(){ return 1; }); 恩, 陷阱又来拉.哈哈. 此f 是什么呢? 于形参是没关系的,而且,你也取不到的. 所以, 形参没任何改变. 所以, 返回 number . 复制代码 代码如下: var foo = { bar: function() { return this.baz; }, baz: 1 }; (function(){ return typeof arguments[0](); })(foo.bar); 这个地方. 主要是考虑的 this的上下文. 传入的是 foo.bar,而非他的父级. 所以, 返回 undefined . 复制代码 代码如下: var foo = { bar: function(){ return this.baz; }, baz: 1 } typeof (f = foo.bar)(); 有了上面那个题目, 这个题目也就可以理解了. 所以, 返回 undefined . 复制代码 代码如下: var f = (function f(){ return "1"; }, function g(){ return 2; })(); typeof f; 这里, 考究的是 () 的返回. () 是返回最后一个. 返回 Number. 复制代码 代码如下: var x = 1; if (function f(){}) { x += typeof f; } x; if 里的东西,是肯定可以执行的.因为他是一个实际的存在(object). 非null|underfined的对象,在if下都是可以继续的 . 但是, 和上面的都是一样的原理, f ,却是不存在的. 所以 返回 1undefined. 复制代码 代码如下: var x = [typeof x, typeof y][1]; typeof typeof x; 这里 ,typeof y ,undefined. 然后, typeof typeof undefined => vtypeof "undefined" 返回 "string". 复制代码 代码如下: (function(foo){ return typeof foo.bar; })({ foo: { bar: 1 } }); 呵呵, 这里是个小陷阱, 如果看得太快了容易进去的哦. 简单的描叙下, var fo = {foo:{bar:1}}; function(foo){})(fo); return typeof foo.bar ==> return typeof fo.bar 所以返回 "undefined". 复制代码 代码如下: (function f(){ function f(){ return 1; } return f(); function f(){ return 2; } })(); 这个题目, 是关于编译器对function的解析了. 于return 没关系. 当他把return 只看成一个string的时候, 编译器已经解析过了所有的function . 与var f = function(){} 这样的是不同的. 所以, 会返回 2. 复制代码 代码如下: function f(){ return f; } new f() instanceof f; 这个地方理解不够, 瓶子给出的解释貌似看得过去 new f() 得到的是f 的本身, 而不是一个new的对象, 因此,不是f 的实例. 所以, 返回 false. with (function(x, undefined){}) length; 关于 with 这块, 如果我把 with也看成一个function(和想像alert一样). 那这个length, 就是with的形参长度了. 返回 2. 好了. 看来很多关于js的问题, 其实还是需要梳理下的. aiming 大大的书,关于这部分的讲解很给力. 可以让人绕过一些陷阱和问题.剩下的就是一些自己的测试了. 这些题目并不能够完全的反映出一个人的js能力, 但是至少能够让人知道编译器是怎么样去处理js的

  推荐阅读

  javascript自执行函数之伪命名空间封装法

自执行函数:自动执行的函数。它在被解释时就已经在运行了。一般函数都是在被调用时才会执行的。 自执行函数的一般格式:(function() { 函数体 })(); 而且,自执行函数中一般都会有一个function() {}形式的匿名函数>>>详细阅读


本文标题:一些javascript一些题目的解析

地址:http://www.17bianji.com/kaifa2/JS/25168.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)