在班上无聊的时候看到了一份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”
当变量申明遇到VO中已经有同名的时候,不会影响已经存在的属性。var a;只是一个变量声明,不会影响已经存在的function  a 的值。
而当赋值的时候,就会相当于重写a。但要记住函数声明会比变量声明提前,所以一般会是被赋值重写。
也许有人或说,a被重写,在用a(--)岂不是会出现错误。在这里a没有被执行,一般 函数没有被执行 内部没有明显语法错误 可以看成黑盒

题目三:

题目二中有涉及,所以答案是function。。。。。。。。。。。。

题目四:

深入理解JavaScript系列(12):变量对象(Variable Object)》中的函数上下文中的变量对象一节就可以清楚地知道,活动对象是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。arguments属性的值是Arguments对象:

AO = {   arguments: <ArgO> };

Arguments对象是活动对象的一个属性,它包括如下属性:

  1. callee — 指向当前函数的引用
  2. length — 真正传递的参数个数
  3. 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笔试题的更多相关文章

  1. 某公司的U3D笔试题

    某公司的U3D笔试题   今天这套笔试题感觉做得一般. 随后是二对一的技术面试,但涉及的技术细节相对较少,更多的是对以前工作.项目经历的询问. 然后说今天先到这里,让我等通知. 我还特意问了一下,通知 ...

  2. 2016 JS 笔试题汇总:

    1 1 1 CS&S(中软国际): 1 JavaScript 循环表达式: 2  JavaScript表达式boolean返回值: 3 网页中的事件/HTML 事件属性/JavaScript ...

  3. 容易答错的JS笔试题

    1,考察this var length = 10 function fn(){     alert(this.length) } var obj = {     length: 5,     meth ...

  4. Js笔试题之千分位格式化

    用js实现如下功能,将给定的数字转化成千分位的格式,如把“10000”转化成“10,000”,并考虑到性能方面的因素. 一.首先想到的办法,将数字转换为字符串(toString())再打散成数组(sp ...

  5. 蛮考验基础的JS笔试题(有坑小心!)

    1.  考察this var length = 10 function fn(){ alert(this.length) } var obj = { length: 5, method: functi ...

  6. JS笔试题

    JS 引用相关题目 以下代码输出什么? 为什么? var a = {n:1}; var b = a; a = {n:2}; a.x = a ; console.log(a.x); console.lo ...

  7. js笔试题一套(未完待续)

    1.下面程序的运行结果是: function test(x, y, z) { alert(test.length); alert(arguments.length); alert(arguments. ...

  8. Js笔试题之返回只包含数字类型的数组

    如js123ldka78sdasfgr653 => [123,78,653] 一般做法 分析: 1.循环字符串每个字符,是数字的挑出来拼接在一起,不是数字的,就给他空的拼个逗号 2.将新字符串每 ...

  9. Js笔试题之正则表达式

    一.复习字符串的传统操作 如何获取一个字符串中的数字字符,并按数组形式输出,如 dgfhfgh254bhku289fgdhdy675gfh 输出[254,289,675] 分析:循环用charAt() ...

随机推荐

  1. iOS-CAEmitterLayer(粒子效果)

    扩展:https://github.com/lichtschlag/Dazzle  ;     , , , ); , );     .f;     .f;     ;     .f;     .f; ...

  2. Ajax的进阶学习(一)

    在Ajax课程中,我们了解了最基本的异步处理方式.本章,我们将了解一下Ajax的一些全局请求事件.跨域处理和其他一些问题. 加载请求 在Ajax异步发送请求时,遇到网速较慢的情况,就会出现请求时间较长 ...

  3. java获取系统当前时间

    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式 System.out.print(df. ...

  4. Android是什么 之三手机之硬件形态

    手机硬件形态 本节可能与Android无关,但是Android系统现在这个阶段更多的是移动终端形态的开发平台,本节给出了Android背后的工作-Android管理的硬件是什么,Android的本质就 ...

  5. JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-006类型转换器( @Converter(autoApply = true) 、type="converter:qualified.ConverterName" )

    一.结构 二.代码 1. package org.jpwh.model.advanced; import java.io.Serializable; import java.math.BigDecim ...

  6. QStandardItemModel简单好用,QTableView带进度条

    类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据.与此不 ...

  7. Delphi对象变成Windows控件的前世今生(关键是设置句柄和回调函数)goodx

    ----------------------------------------------------------------------第一步,准备工作:预定义一个全局Win控件变量,以及一个精简 ...

  8. 更新SDK后ADT版本低不支持

    在android_sdk_windows/tools/lib下的plugin.prop文件里被变更为 # begin plugin.prop plugin.version=21.1.0 # end p ...

  9. PHP如何提取img标签属性

    extract_attrib是一个提取的图像标签属性的PHP脚本函数,使用正则表达式方法提取. 当你想在HTML的img标签中提取图像数据,这非常有用. 如果你知道如何修改正则表达式,那么同样的功能进 ...

  10. Spring MVC配置DispatcherServlet的url-pattern

    在配置Spring MVC的核心过滤器DispatcherServlet的url-pattern时是有要求的. <servlet> <servlet-name>...</ ...