由3道题来分析js中的函数作用域,作用域链,变量提升

时间: 2019-01-01阅读: 1366标签: 面试

第一题:

var foo = 1
function bar(){
    if(!foo){
        var foo = 10;
    }
    console.log(foo)
}
bar()

这道题大家会误认为是1

其实在内部函数执行时,无论这个判断是否成立,都会对声明变量进行提升,所以var foo = undefined,所以在内部判断,因为undefined是false,取反就是true,执行var foo = 10,所以:

最后答案就是10

 

第二题:

var n = 0
function a(){
    var n = 10
    function b(){
        n++
        console.log(n)
    }
    b()
    return b
}
var c = a()
c()
console.log(n

我直接叙述解题步骤了:

先声明变量,函数声明提前,执行a()函数,在a函数里又声明了函数b,调用函数b并且将b返回,n++将函数a里的n的值变为11,打印n,所以第一个n是11,

这时候将函数b返回,并且执行,因为这时还是在函数a内部执行,n已经是11,再n++,所以n = 12,

最后一个是n是0,函数的私有作用域无法访问

所以最终结果是11,12,0

 

第三题:

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

js的非严格模式下:函数的实参集合与形参变量存在‘映射关系’,不管其中谁改变了,另外一个都会跟着改变

js的严格模式下:arguments实参集合和形参变量的映射关系被切断了,相互之间互不干扰

如果没有返回值则是undefined

所以结果是3,10,undefined


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1853

一道面试题引起的思考

对于具有固定格式的字符串,可以考虑使用正则表达式来识别和匹配。实现一个功能的时候,不要只考虑正常情况,要多考虑一些非正常情况,比如输入格式不对、用户不按套路来或者因为一些奇奇怪怪的事情报错。并且能对可预见的非正常情况做一个容错处理。

前端开发岗位面试中常考的源代码实现

手动撸个call/apply/bind,实现call来看下call的原生表现形式:如果一个函数作为一个对象的属性,那么通过对象的.运算符调用此函数,this就是此对象;apply和call实现类似,只是传入的参数形式是数组形式

7个简单但棘手的JavaScript面试问题

如果您符合高级开发人员的资格,其工作涉及JavaScript,那么在编码面试中很有可能会被问到棘手的问题。在这篇文章中,你会发现7个乍一看很简单但很棘手的JavaScript面试问题。虽然一开始这些问题看起来是随意的,但是它们试图与JavaScript的重要概念挂钩

前端程序员经常忽视的一个JavaScript面试题

这几天面试上几次碰上这道经典的题目,特地从头到尾来分析一次答案,这道题的经典之处在于它综合考察了面试者的JavaScript的综合能力,包含了变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级等知识

7个带陷阱的js面试题

在 JS 面试中,经常会看到一些简单而又沙雕的题目,这些题目包含一些陷阱,但这些在我们规范的编码下或者业务中基本不会出现。 有些面试官就是这样,不专注于制定代码的标准和规范上,却用不规范的代码去检验别人是否细心

我是如何准备技术面试的

目前拿到的知名公司的offer是腾讯和新美大(大众点评、美团)。一直想写一篇面经分享给大家,但因为一些琐碎的事情,就一直耽误着。

提高你的 JavaScript 技能10 个面试题

刷题是我们提高自己技术的一种好方法。下面的问题很有挑战性和“指导性”。如果你知道该怎样回答,那意味着自己的水平很好,但是如果你发现自己答错了,并能够搞清楚为什么错,我认为那会更好!

Web前端年后跳槽面试复习指南

很多童鞋可能年后有自己的一些计划,比如换份工作环境,比如对职业目标有了新的打算。当然面试这一关不得不过,大概又不可能系统性的复习,这里罗列一些 重点 面试的知识点和文章,

假如我是面试官,我会这样虐你

又是金三银四的时候,我希望这份面试题能够祝你一臂之力!技术方面从 Java 基础、JVM、Spring、数据库、拓展题等方面考察你,当然面试官可能还会问些其他的技术点。总的来说,还是得多准备充分,面试时灵活答辩

web 开发面试时你应该提出的 10 个问题

在找工作的过程中,你到达了一个激动人心的阶段!约好了面试日期,做足了准备,按时参加了面试,整场面试十分顺利。然后进入了「你对我们公司有什么要了解的?

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!