一些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 金额文本框实现代码
Feb 14 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
Mar 25 Javascript
jQuery中选择器小问题(新人难免遇到)
Mar 31 Javascript
jQuery插件分享之分页插件jqPagination
Jun 06 Javascript
javascript设计模式之module(模块)模式
Aug 19 Javascript
jQuery Ajax请求后台数据并在前台接收
Dec 10 Javascript
详解Vue中添加过渡效果
Mar 20 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
Sep 18 Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 Javascript
js+canvas实现刮刮奖功能
Sep 13 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 Javascript
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
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 Image Resize图片大小调整的函数代码
2011/01/17 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
python+pyqt实现右下角弹出框
2017/10/26 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
通俗讲解python 装饰器
2020/09/07 Python
详解python的super()的作用和原理
2020/10/29 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
美国网上花店:JustFlowers
2017/02/12 全球购物
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
简历自我评价范文
2019/04/24 职场文书
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技