一些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 相关文章推荐
怎么清空javascript数组
May 11 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
Apr 04 Javascript
Javascript数组与字典用法分析
Dec 13 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
Apr 14 Javascript
jQuery实现简单的网页换肤效果示例
Sep 18 Javascript
MUI实现上拉加载和下拉刷新效果
Jun 30 Javascript
用Axios Element实现全局的请求loading的方法
Mar 15 Javascript
p5.js实现动态图形临摹
Oct 23 Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 Javascript
js实现轮播图效果 z-index实现轮播图
Jan 17 Javascript
微信小程序自定义弹出层效果
May 26 Javascript
JavaScript+HTML实现学生信息管理系统
Apr 20 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
域名查询代码公布
2006/10/09 PHP
php 中文处理函数集合
2008/08/27 PHP
php绘制一条直线的方法
2015/01/24 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
详解JavaScript的变量
2019/04/04 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
Python Socket传输文件示例
2017/01/16 Python
python 读取DICOM头文件的实例
2018/05/07 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
Python列表如何更新值
2020/05/27 Python
python线程优先级队列知识点总结
2021/02/28 Python
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
女娲补天教学反思
2014/02/05 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
退休欢送会致辞
2015/07/31 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery