一些javascript一些题目的解析


Posted in Javascript onDecember 25, 2010

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 相关文章推荐
Extjs在exlipse中设置自动提示的方法
Apr 07 Javascript
基于Jquery的温度计动画效果
Jun 18 Javascript
js下通过getList函数实现分页效果的代码
Sep 17 Javascript
js封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
Aug 19 Javascript
AngularJs Injecting Services Into Controllers详解
Sep 02 Javascript
微信小程序 火车票查询实例讲解
Oct 17 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
Dec 25 Javascript
angularjs实现下拉列表的选中事件示例
Mar 03 Javascript
AngularJS入门教程一:路由用法初探
May 27 Javascript
vue-router 导航钩子的具体使用方法
Aug 31 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
Mar 07 Javascript
javascript字符串拼接的效率问题
Dec 25 #Javascript
原生javascript获取元素样式属性值的方法
Dec 25 #Javascript
javascript中使用replaceAll()函数实现字符替换的方法
Dec 25 #Javascript
Javascript动态绑定事件的简单实现代码
Dec 25 #Javascript
浅析javascript闭包 实例分析
Dec 25 #Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 #Javascript
javascript自执行函数之伪命名空间封装法
Dec 25 #Javascript
You might like
浅谈php和.net的区别
2014/09/28 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
Symfony核心类概述
2016/03/17 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
javascript常用功能汇总
2015/07/05 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
python 模拟登陆github的示例
2020/12/04 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
什么是serialVersionUID
2016/03/04 面试题
个人综合鉴定材料
2014/05/23 职场文书
社区平安建设方案
2014/05/25 职场文书
医院科室评语
2015/01/04 职场文书
财务部岗位职责范本
2015/04/14 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
golang goroutine顺序输出方式
2021/04/29 Golang
解析原生JS getComputedStyle
2021/05/25 Javascript
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android