所在实习公司的JS笔试题
在班上无聊的时候看到了一份JS笔试题(我是电面进去的,没做过这份题~~),开始还觉得蛮简单。。。。。。后来觉得还是很有意思的,贴出来一起看看。
题目一:
if(!("a" in window)){
var a = 1;
}
alert(a);
题目二:
var a=1,
b= function a(x){
x&&a(-xx);
}; alert(a);
题目三:
function a(x){
.. return x*2;
.. }
var a;
alert (a);
题目四:
function b(x,y,a){
.. arguments[2] = 10;
.. alert(a);
.. }
b(1,2,3);
题目五:
function a() {
alert(this);
}
a.call(null);
题目六:
写深度克隆的代码。
答案和分析:
题目一,有人认为a没有存在window里面,所以输出a=1,还有人认为a在私有作用域,alert访问不到。是undefined。
首先结果的确是undefined。先说第二种情况,所谓私有作用域一般都是写在function里面的,在这些判断语句里面有赋值操作,就要看这些判断语句所处的作用域,这里很明显全局的。所以a不是私有变量。
下面可以尝试输入以下代码试试:
alert(“a” in window);
var a;
首先所有的全局变量都可以作为window的属性,window.a,所以可以用上述方法查看a是否存在window中。上面的输出是true,因为Js中所有的变量声明都会在作用域的顶部(有点类似函数声明的预编译)。js引擎会首先搜索所有的变量声明然后提到作用域的顶部,但是变量的赋值却不会提前(如果是的话,可以想像会发生很多不可预知的错误),var a=1;是等价于var a; a=1;的。
所以这道题,因为变量a会在作用域顶部存在window中,所以跳过赋值操作,输出结果是undefined。
题目二:
function a(){
return 1;
}
var a;
alert(typeof a); //"function"
这个题有点意思,上面说过函数声明会提前,变量声明也会提前,现在var a;要提前,function a也要提前。。。。。。到底谁会覆盖谁呢?
function a(){
return 1;
}
var a;
alert(typeof a); //"function"
很明显上面上面中函数声明会覆盖变量声明,优先级较高一点。但是改成var a=1;之后结果却是截然相反的。
function a(){
return 1;
}
var a =1;
alert(typeof a); //“number”
而当赋值的时候,就会相当于重写a。但要记住函数声明会比变量声明提前,所以一般会是被赋值重写。
也许有人或说,a被重写,在用a(--)岂不是会出现错误。在这里a没有被执行,一般 函数没有被执行 内部没有明显语法错误 可以看成黑盒
题目三:
题目二中有涉及,所以答案是function。。。。。。。。。。。。
题目四:
《深入理解JavaScript系列(12):变量对象(Variable Object)》中的函数上下文中的变量对象一节就可以清楚地知道,活动对象是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。arguments属性的值是Arguments对象:
AO = { arguments: <ArgO> };
Arguments对象是活动对象的一个属性,它包括如下属性:
- callee — 指向当前函数的引用
- length — 真正传递的参数个数
- properties-indexes (字符串类型的整数) 属性的值就是函数的参数值(按参数列表从左到右排列)。 properties-indexes内部元素的个数等于arguments.length. properties-indexes 的值和实际传递进来的参数之间是共享的。
这个共享其实不是真正的共享一个内存地址,而是2个不同的内存地址,使用JavaScript引擎来保证2个值是随时一样的,当然这也有一个前提,那就是这个索引值要小于你传入的参数个数,也就是说如果你只传入2个参数,而还继续使用arguments[2]赋值的话,就会不一致,例如:
function b(x, y, a) { arguments[2] = 10; alert(a); } b(1, 2);
这时候因为没传递第三个参数a,所以赋值10以后,alert(a)的结果依然是undefined,而不是10,但如下代码弹出的结果依然是10,因为和a没有关系。
function b(x, y, a) { arguments[2] = 10; alert(arguments[2]); } b(1, 2);
题目五:
根据ECMAScript262规范规定:如果第一个参数传入的对象调用者是null或者undefined的话,call方法将把全局对象(也就是window)作为this的值。所以,不管你什么时候传入null,其this都是全局对象window,所以该题目可以理解成如下代码:
function a() { alert(this); } a.call(window);
所以答案是object window。
题目六:
深度克隆,百度会有代码的。
所在实习公司的JS笔试题的更多相关文章
- 某公司的U3D笔试题
某公司的U3D笔试题 今天这套笔试题感觉做得一般. 随后是二对一的技术面试,但涉及的技术细节相对较少,更多的是对以前工作.项目经历的询问. 然后说今天先到这里,让我等通知. 我还特意问了一下,通知 ...
- 2016 JS 笔试题汇总:
1 1 1 CS&S(中软国际): 1 JavaScript 循环表达式: 2 JavaScript表达式boolean返回值: 3 网页中的事件/HTML 事件属性/JavaScript ...
- 容易答错的JS笔试题
1,考察this var length = 10 function fn(){ alert(this.length) } var obj = { length: 5, meth ...
- Js笔试题之千分位格式化
用js实现如下功能,将给定的数字转化成千分位的格式,如把“10000”转化成“10,000”,并考虑到性能方面的因素. 一.首先想到的办法,将数字转换为字符串(toString())再打散成数组(sp ...
- 蛮考验基础的JS笔试题(有坑小心!)
1. 考察this var length = 10 function fn(){ alert(this.length) } var obj = { length: 5, method: functi ...
- JS笔试题
JS 引用相关题目 以下代码输出什么? 为什么? var a = {n:1}; var b = a; a = {n:2}; a.x = a ; console.log(a.x); console.lo ...
- js笔试题一套(未完待续)
1.下面程序的运行结果是: function test(x, y, z) { alert(test.length); alert(arguments.length); alert(arguments. ...
- Js笔试题之返回只包含数字类型的数组
如js123ldka78sdasfgr653 => [123,78,653] 一般做法 分析: 1.循环字符串每个字符,是数字的挑出来拼接在一起,不是数字的,就给他空的拼个逗号 2.将新字符串每 ...
- Js笔试题之正则表达式
一.复习字符串的传统操作 如何获取一个字符串中的数字字符,并按数组形式输出,如 dgfhfgh254bhku289fgdhdy675gfh 输出[254,289,675] 分析:循环用charAt() ...
随机推荐
- 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?(3)
[编者按]本篇文章作者是 Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客.本篇文章中,作者主要介绍了如何基于 Parse 特点,打造一款类似 Instagr ...
- codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)
题目 给出一个n*m的01矩阵, 让你最多改变k个里面的值(0变1,1变0), 使得0.1的连通分量是矩阵.输出最少步数 1 ≤ n, m ≤ 100; 1 ≤ k ≤ 10 题解: 如果01连通分量 ...
- SGU 105
There is sequence 1, 12, 123, 1234, ..., 12345678910, ... . Given first N elements of that sequence. ...
- ubuntu安装hive
1.安装mysql,可参考下面链接 http://www.cnblogs.com/liuchangchun/p/4099003.html 2.安装hive,之前,先在mysql上创建一个hive,数据 ...
- PHP5.4最新特性
PHP5.4最新特性 官网:ChangeLog-5.php#5.4.0 原文Oracle:LAMP 体系有了新的竞争,但此版本中的特性使 PHP 再次挑战极限. 稍微做了修改.: 概述总结:1. ...
- 快速幂取模 POJ 3761 bubble sort
题目传送门 /* 题意:求冒泡排序扫描k次能排好序的全排列个数 数学:这里有一个反序列表的概念,bj表示在j左边,但大于j的个数.不多说了,我也是看网上的解题报告. 详细解释:http://blog. ...
- 有N个大小不等的自然数(1--N),请将它们由小到大排序。要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。
#include<stdio.h> int main() { ]={,,,,,,,,}; int i,tmp; ;i<;i++) { ) { tmp=a[i]; a[i]=a[a[i ...
- JAVA实现Excel导出数据(以写好的Excel模版导出)
工作中经常会有将后台数据以Excel导出的功能. 简单的方法有将response的contentType设置为application/vnd.ms-excel: 或在JSP页面直接设置成: <% ...
- iOS开发--动画篇之layout动画深入
"不得不说,单单是文章的标题,可能不足以说明本文的内容.因此,在继续讲述约束动画之前,我先放上本文要实现的动画效果." 编辑:Bison投稿:Sindri的小巢 约束动画并不是非常 ...
- updmap-sys failed. Output has been stored in
Ubuntu 12.04升级到Ubuntu 12.04lts的时候,出现错误: Do you want to continue? [Y/n] ySetting up tex-common (4.04) ...