一些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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
javascript 节点遍历函数
Mar 28 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
Dec 05 Javascript
jQuery 删除/替换DOM元素的几种方式
May 20 Javascript
Javascript解析URL方法详解
Dec 05 Javascript
使用控制台破解百小度一个月只准改一次名字
Aug 13 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
javascript 正则表达式去空行方法
Jan 24 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
Feb 06 Javascript
Vue实现的父组件向子组件传值功能示例
Jan 19 Javascript
详解几十行代码实现一个vue的状态管理
Jan 28 Javascript
JavaScript对象原型链原理解析
Jan 22 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
学习使用curl采集curl使用方法
2012/01/11 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
从零学Python之hello world
2014/05/21 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
Django 路由系统URLconf的使用
2018/10/11 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
浅析python 字典嵌套
2020/09/29 Python
python调用win32接口进行截图的示例
2020/11/11 Python
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
职位说明书范文
2014/05/07 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
夏季药店促销方案
2014/08/22 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2014年管理工作总结
2014/11/22 职场文书
学校开除通知书
2015/04/25 职场文书
Python中for后接else的语法使用
2021/05/18 Python