码迷,mamicode.com
首页 > Web开发 > 详细

几道js的笔试题

时间:2015-06-05 21:00:35      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

一、今天在群里看见有同学发了几道关于js的笔试题,拿来研究一下,虽然自己看过了高级程序设计,也看了javascript语言精粹,自以为对js还是有一些理解的,但是真正遇到问题的时候,发现并不能融会贯通,掌握的不扎实。借此机会来回顾一下,共同学习~

二、几道小题(写出以下几道题的弹出框的内容)

(1)

1 if(!("a" in window)){
2   var a=1;
3 }
4 alert(a);

解析:正常的思路:首先需要了解函数声明提升的概念,在执行代码之前,会先读取函数或者变量的声明。所以在if语句判断a是否存在于window的时候答案是:yes。也就是说if中的判断条件是不成立的,也就不会执行if中的代码。执行到alert语句的时候,因为a只做了声明没有赋值,所以结果是undefine!实际的答案是:1。呐,不要质疑自己,你的思路很正确,只是漏掉了一点细节而已,if判断中是"a",是一个字符串,而我们声明赋值的那个是一个变量,不是一个哦~因为字符串a没有定义,所以不存在于window对象中~

(2)

1 function a(x){
2   return x*2;
3 }
4 var a;
5 alert(a);

 解析:上题我们就提到函数声明提升的概念。在这里也就是说会有两个声明提升,我个人的理解两个声明是一样的,都是a,也就是一个变量声明了两次,可以看成是同一个。执行代码的时候调用的就是function了,所以最后答案是:alert函数a

 变形:如果把 var a 替换成 var a=1 结果会怎样呢?

(3)

1 var a=1;
2 b=function a(x){
3   x&&a(--x);
4 };
5 alert(a);

 解析:不需要看函数的内部实现,我们先来看函数的结构。一个变量a,一个函数表达式b答案自然是b。最开始我也是有疑惑的,经过尝试发现,这种形式的函数表达式当中的a不会发生函数声明提升,同时b只能在函数内部访问,不能在外部访问。由此得出结论:这样给函数表达式的匿名函数增加标识符的意义不大。

(4)

1 function a(){
2   alert(this);
3 }
4  a.call(null);

 解析:解这道题需要注意两个问题:1、call的用法 2、null的特殊性;call和apply的用法都是劫持另一个对象的方法,继承另一个对象的属性,只是他们的参数有差异,在这里不涉及,有兴趣的童鞋可以自己去补习一下~在这道题里,将a函数的执行上下文改成了括号中的对象。正常的情况,是应该输出括号中的对象的,但是null和undefined比较特殊,ECMAScript5中有介绍,当call的参数是null和undefined的时候,执行上下文是全局,在浏览器中window是全局对象,所以alert出的是window

三、总结:个人想法,欢迎大家多多提出意见和不同看法,共同学习~~啦啦~~

几道js的笔试题

标签:

原文地址:http://www.cnblogs.com/zhiying/p/4054700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!