一些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 相关文章推荐
用js计算页面执行时间的函数
Dec 07 Javascript
js获取下拉列表框中的value和text的值示例代码
Jan 11 Javascript
纯javascript实现简单下拉刷新功能
Mar 13 Javascript
JavaScript判断按钮被点击的方法
Dec 13 Javascript
JavaScript开发者必备的10个Sublime Text插件
Feb 27 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
Jun 25 Javascript
AngularJS中isolate scope的用法分析
Nov 22 Javascript
js微信应用场景之微信音乐相册案例分享
Aug 11 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
Jan 18 Javascript
Node.js 多线程完全指南总结
Mar 27 Javascript
layUI实现列表查询功能
Jul 27 Javascript
vue render函数动态加载img的src路径操作
Oct 26 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
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
layui文件上传实现代码
2017/05/20 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
pygame学习笔记(5):游戏精灵
2015/04/15 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
历史学专业推荐信
2013/11/06 职场文书
财务主管岗位职责
2014/02/28 职场文书
捐资助学倡议书
2014/04/15 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
Python实现归一化算法详情
2022/03/18 Python