一些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 相关文章推荐
document.forms[].submit()使用介绍
Feb 19 Javascript
JQuery中attr方法和removeAttr方法用法实例
May 18 Javascript
JS实现slide文字框缩放伸展效果代码
Nov 05 Javascript
js实现兼容IE、Firefox的图片缩放代码
Dec 08 Javascript
jQuery中DOM节点的删除方法总结(超全面)
Jan 22 Javascript
a标签置灰不可点击的实现方法
Feb 06 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
Feb 11 Javascript
vue-cli V3.0版本的使用详解
Oct 24 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
Dec 14 Javascript
javascript实现fetch请求返回的统一拦截
Dec 22 Javascript
JS实现网站楼层导航效果代码实例
Jun 16 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 Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
基于jQuery选择器的整理集合
2013/04/26 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
js使用心得分享
2015/01/13 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
Python fileinput模块使用实例
2015/05/28 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
python django model联合主键的例子
2019/08/06 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python自动点赞功能的实现思路
2020/02/26 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
教师年终个人自我评价
2013/10/04 职场文书
大学生军训感想
2014/02/16 职场文书
元旦活动感言
2014/03/08 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
在校实习生求职信
2014/06/18 职场文书
手机被没收的检讨书
2014/10/04 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
刑事法律意见书
2015/06/04 职场文书
七一表彰大会简报
2015/07/20 职场文书
领导离职感言
2015/08/03 职场文书