一些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 相关文章推荐
JavaScript之appendChild、insertBefore和insertAfter使用说明
Dec 30 Javascript
JS重要知识点小结
Nov 06 Javascript
JQuery入门—编写一个简单的JQuery应用案例
Jan 03 Javascript
简单的ajax连接库分享(不用jquery的ajax)
Jan 19 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
详解jQuery中的事件
Dec 14 Javascript
React如何避免重渲染
Apr 10 Javascript
微信小程序全局变量改变监听的实现方法
Jul 15 Javascript
解决vue scoped scss 无效的问题
Sep 04 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 07 Javascript
jquery自定义组件实例详解
Dec 31 jQuery
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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
PHP header函数分析详解
2011/08/06 PHP
10个简化PHP开发的工具
2014/12/25 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
python使用7z解压apk包的方法
2015/04/18 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
python机器学习之神经网络实现
2018/10/13 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
澳大利亚商务邀请函
2014/01/17 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
借钱欠条怎么写
2015/07/03 职场文书
高三英语教学反思
2016/03/03 职场文书
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB