几道js的笔试题

一、今天在群里看见有同学发了几道关于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。

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

时间: 2024-12-25 18:40:11

几道js的笔试题的相关文章

告诉我图样图森破的两道简单C++笔试题

今晚刷了一大堆的笔试题,中规中矩,但是有两道做得很快但是都错了的题目,印象深刻. (要找工作的大四渣有没有共鸣,在学校明明很努力,但是总是跟不上时代,没有厉害的项目,也没有过人的竞赛成绩,内推屡屡失败,前天阿里巴巴在线笔试也被虐死,真心迷惘,唯独刷题搞笔试了.) 第一道题是关于宏定义的. #include<iostream> using namespace std; #define fun(n) (n-1)*n int main() { int x=3; cout<<fun(x+3

2016网易有道内推笔试题

1. 洗牌 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description:洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆, 左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆).接着就开始洗牌的过程,先放下右手的 最后一张牌,

阿里2道前端笔试题+堆糖2道前端笔试题

阿里前端笔试题 1.一个表格HTML代码如下 <table id="table1"> <tbody> <tr><td>1</td><td><button>Delete</button></td></tr> <tr><td>2</td><td><button>Delete</button></

容易答错的JS笔试题

1,考察this var length = 10 function fn(){     alert(this.length) } var obj = {     length: 5,     method: function(fn) {         fn() // ?         arguments[0]() // ?     } } obj.method(fn) 这里的坑主要是arguments,我们知道取对象属于除了点操作符还可以用中括号,这里fn的scope是arguments,即

JS笔试题

1,考察this var length = 10function fn(){ alert(this.length)}var obj = { length: 5, method: function(fn) { fn() // ? arguments[0]() // ? }}obj.method(fn)这里的坑主要是arguments,我们知道取对象属于除了点操作符还可以用中括号,这里fn的scope是arguments,即fn内的this===arguments,调用时仅传了一个参数fn,因此le

两道笔试题的感触

今天做了两道笔试题,收益良多.有些题,你会发现,虽然并不难,但是却很容易没有思路或者出错,这都是源自平时的不求甚解.很多知识点,自以为已经掌握,其实只是管中窥豹,可见一斑.不要一味墨守成规,也要用于思考,很多东西既要知其然,也要知其所以然.我一直觉得了解和精通中间差着十万八千里,看来还有很长一段路要走.只有比别人更早.更勤奋地努力,才能尝到更加成功的滋味.哈哈,跑题了. 下面看一下两道笔试题.一.大概简单地说一下,求下面这段代码的结果. new Thread(new Runnable() { p

【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)

经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n)[10]; struct MyStruct { char dda; double dda1; int type ; }; MyStruct k; printf("%d %d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(

js+html+css实现简单页面交互功能(2015知乎前端笔试题)http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2

js+html+css实现简单页面交互功能(2015知乎前端笔试题) http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2 密码:hellozhihu

几道C笔试题

Q:printf和scanf的返回值是什么? int main() { int i = 43; int n = printf("%d\n",i); printf("%d\n",n); return 0; } A:printf函数返回3,因为其输出了'4', '3', '\n' 三个字符. printf返回的是成功输出到STDOUT的字符数.如果发生错误,返回一个负数. scanf返回的是成功赋值的变量个数,如果发生错误,返回EOF Q:既然fgetc是接收输入的字符