一些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 GridView 实现自动计算操作代码
Mar 25 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
Dec 15 Javascript
JS正则表达式之非捕获分组用法实例分析
Dec 28 Javascript
微信小程序 Tab页切换更新数据
Jan 05 Javascript
微信小程序中的onLoad详解及简单实例
Apr 05 Javascript
Javascript创建类和对象详解
May 31 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
swiper 解决动态加载数据滑动失效的问题
Feb 26 Javascript
使用Vue实现调用接口加载页面初始数据
Oct 28 Javascript
通过vue刷新左侧菜单栏操作
Aug 06 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 Javascript
利用javaScript处理常用事件详解
Apr 14 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
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
Python subprocess模块学习总结
2014/03/13 Python
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python制作爬虫采集小说
2015/10/25 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
python deque模块简单使用代码实例
2020/03/12 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
首都博物馆观后感
2015/06/05 职场文书
二十年同学聚会感言
2015/07/30 职场文书
母亲节主题班会
2015/08/14 职场文书
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS