资讯专栏INFORMATION COLUMN

每天学习一点js

philadelphia / 1152人阅读

摘要:变量提升表示的是变量的声明会被提前到函数顶部的地方,而赋值语句不会提升。需要记住一点就是,在中,函数声明的优先级高于变量声明的优先级。因为赋值语句不会被覆盖,所以会是一个数字,而不是函数,最终返回。

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

题1

if(!(a in window)){
   var a  = 1;    
}
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。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93768.html

相关文章

  • 前端面试每日3+1(周汇总2019.08.25)

    摘要:前端面试每日题,以面试题来驱动学习,每天进步一点让努力成为一种习惯,让奋斗成为一种享受相信坚持的力量项目地址前端面试每日推荐欢迎跟一起折腾前端,系统整理前端知识,目前正在折腾,打算打通算法与数据结构的任督二脉。 《论语》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量...

    Java3y 评论0 收藏0
  • 前端面试每日3+1(周汇总2019.08.25)

    摘要:前端面试每日题,以面试题来驱动学习,每天进步一点让努力成为一种习惯,让奋斗成为一种享受相信坚持的力量项目地址前端面试每日推荐欢迎跟一起折腾前端,系统整理前端知识,目前正在折腾,打算打通算法与数据结构的任督二脉。 《论语》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量...

    付伦 评论0 收藏0
  • 前端面试每日 3+1 —— 第126天

    摘要:前端面试每日题,以面试题来驱动学习,每天进步一点让努力成为一种习惯,让奋斗成为一种享受相信坚持的力量学习不打烊,充电加油只为遇到更好的自己,天无节假日,每天早上点纯手工发布面试题死磕自己,愉悦大家。 今天的知识点 (2019.08.20) —— 第126天 [html] 请说说Canvas和SVG图形的区别是什么? [css] 说说你对hasLayout的理解,触发hasLayou...

    LMou 评论0 收藏0
  • 前端面试每日3+1——第116天

    摘要:前端面试每日题,以面试题来驱动学习,每天进步一点让努力成为一种习惯,让奋斗成为一种享受相信坚持的力量学习不打烊,充电加油只为遇到更好的自己,天无节假日,每天早上点纯手工发布面试题死磕自己,愉悦大家。 今天的知识点 (2019.08.10) —— 第116天 [html] 页面布局中的结构与表现分离,那么什么是结构?什么是表现呢? [css] 怎么自定义鼠标指针的图案? [js] ...

    blankyao 评论0 收藏0
  • 前端面试每日 3+1 —— 第136天

    摘要:学习不打烊,充电加油只为遇到更好的自己,天无节假日,每天早上点纯手工发布面试题死磕自己。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花分钟来学习与思考。 今天的知识点 (2019.08.30) —— 第136天 [html] HTML5的服务器(server-sent event)发送事件有什么应用场景? [css] 你有了解css计数器(序列数字字符自动递增)吗?如何通过css...

    Jeff 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<