---- 有人会说js很简单,很容易学,但是要想把这门语言用活,用精通还是需要下很大的功夫的。那么我们就来看看接下来这几道js面试题吧。

题1

if(!(a in window)){
var a = ;
}
console.log(a);

在控制台输出的结果是 undefined,其实就是考察js中变量提升的知识点。

变量提升表示的是变量的声明会被提前到函数顶部的地方,而赋值语句不会提升。因此上面的题目实际是等于如下代码    

//变量提升
var a;
if(!(a in window)){
a = 1;
}
console.log(a)  

变量a提升到顶部,第一句就相当于window.a = undefined,所以在if语句中,判断条件始终是false,因此a=1不会执行,最终输出undefined。

题2

var a = 1,
b = function(){
x && a(--x);
}
console.log(a);

结果是1.

这道题考察的知识点是是具名函数表达式,声名函数表达式是不攒在变量提升的,所以函数的定义不会被提前到顶部;而且声名函数表达式的名字在外部访问时会报错,只能函数内部访问到。我们可以看看下面的例子。

var b = function a () {}
b(); //调用正常
a();//typeError:a is not a function

题3

function a(x){
return x*2;
}
var a ;
console.log(typeof a);

结果为 function

这道题目是的知识点是 函数声明和变量声明。 需要记住一点就是,在JavaScript中,函数声明的优先级高于变量声明的优先级。

因此在上述题中,由于优先级的问题,a会被定义为一个函数,后面定义的变量不会生效,因此typeof的时候会返回function。

但是,需要注意的是,虽然函数声明会覆盖变量声明,但不会覆盖变量的赋值,我们将上面的代码该下,就会发现这个特点。

function a(x){
return x*2;
}
var a = 1;
console.log(typeof a);

上面的代码会返回number。因为赋值语句a= 1不会被覆盖,所以a会是一个数字,而不是函数,最终返回number。

题4

function b(x,y,a){
arguments[2] = 10;
console.log(a);
}
b(1,2,3);

最终输出的结果是10

但是,需要注意一种特殊情况,那就是严格模式,在严格模式下,arguments对象实际是函数参数的一个拷贝,实际指向的是不同的内存空间,对arguments值的改变并不会影响到函数参数值。

所以在严格模式下输出的是3

function a(){
console.log(this);
}
a.call(null);

输出的结果是window对象。

这道题目考察的call方法,在js中,如果给call方法传递的第一个参数为null或者undefined,那么call方法中this会指向全局对象。

在浏览器环境中,全局对象为window;而在nodejs环境中全局对象为global,因此上述代码如果在浏览器下运行,会返回window。

 

每天学习点js的更多相关文章

  1. 每天学习点js(2)

    在日常开发中可能有很多不被重视但有关系着基础的知识,下面我们就来看看这几道题吧 题1 ["1","2","3"].map(parseInt) ...

  2. 我的学习笔记之node----node.js+socket.io实时聊天(1) (谨此纪念博客开篇)

    本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...

  3. 一个Js开发者学习Python的第一天

    原文地址:小寒的博客 https://www.dodoblog.cn/blogs/5bf6b8fa0c09883d0f8aad13 作为一个有着足足两年半学习经验和一年半开发经验的js开发者,看着js ...

  4. 我的学习笔记之node----node.js+socket.io实时聊天(1)

    本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...

  5. XSS攻击 js 脚本注入

    原文地址:http://www.cnblogs.com/robot/archive/2009/04/15/1436107.html 1.不要相信Request.QueryString: 相信在asp时 ...

  6. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  7. js学习笔记:操作iframe

    iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

随机推荐

  1. sudo:无法解析主机 解决方案

    你如果电脑中没有vim,用gedit也可以. 打开文件以后,将其中的 127.0.1.1  xxxxx xxx 替换成你电脑的自己的名字即可.

  2. 【linux】 vsftpd自动

    开机默认VSFTP服务自动启动: 方法一-常用方便的方法 [root@localhost /]# chkconfig --list|grep vsftpd vsftpd          0:off ...

  3. vxworks for x86读取bios时间的解决方法

    vxworks for x86读取bios时间的解决方法 系统时间与bsp有关,在vzworks for x86系列的目标没有直接读取RTC(实时时钟控制器)的函数,用time.h中的函数读到的始终是 ...

  4. Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContextAware

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  5. Java注释分类

    Java注释分类 1.单行注释    //打印结果    System.out.println("结果是:"+result); 2.多行注释    /**     * @autho ...

  6. Struts+Spring+Hibernate、MVC、HTML、JSP

    javaWeb应用 JavaWeb使用的技术,比如SSH(Struts.Spring.Hibernate).MVC.HTML.JSP等等技术,利用这些技术开发的Web应用在政府项目中非常受欢迎. 先说 ...

  7. Aspose.Words for .NET

    Aspose.Words for .NET Aspose.Words for .NET是 .NET 下先进的 Word 文档处理 API.它支持 DOC, OOXML, RTF, HTML, Open ...

  8. 【BZOJ4566】找相同字符(后缀数组)

    [BZOJ4566]找相同字符(后缀数组) 题面 BZOJ 题解 后缀数组的做法,应该不是很难想 首先看到两个不同的串,当然是接在一起求\(SA,height\) 那么,考虑一下暴力 在两个串各枚举一 ...

  9. 【BZOJ2442】修建草坪(动态规划,单调队列)

    [BZOJ2442]修建草坪(动态规划,单调队列) 题面 权限题..洛谷 题解 设\(f[i]\)表示前\(i\)个里面选出来的最大值 转移应该比较显然 枚举一个断点的位置,转移一下就好 \(f[i] ...

  10. 【BZOJ1003】物流运输(动态规划,最短路)

    [BZOJ1003]物流运输(动态规划,最短路) 题面 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司 ...