一些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 相关文章推荐
jquery 屏蔽一个区域内的所有元素,禁止输入
Oct 22 Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
JS 退出系统并跳转到登录界面的实现代码
Jun 29 Javascript
教你如何使用PHP输出中文JSON字符串
May 22 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
Aug 10 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
Oct 16 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
Nov 21 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
Jun 19 Javascript
vue-router传参用法详解
Jan 19 Javascript
vue路由传参页面刷新参数丢失问题解决方案
Oct 08 Javascript
小程序点餐界面添加购物车左右摆动动画
Sep 23 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执行速度全攻略(上)
2006/10/09 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
python的绘图工具matplotlib使用实例
2014/07/03 Python
跟老齐学Python之list和str比较
2014/09/20 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
python实现倒计时小工具
2019/07/29 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
经典c++面试题五
2014/12/17 面试题
市场营销专科应届生求职信
2013/11/24 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
团拜会策划方案
2014/06/07 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL