js大公司面试题——方法执行顺序

作者: Nice先生的狂想曲 | 来源:发表于2019-10-21 23:56 被阅读0次

前言

对于方法执行的顺序,讲真在面试时遇到这题目一开始挺开心的,毕竟自己也大概了解,但是这题考察的并不是一个知识点那么简单,再加上在原型的问题上绕来绕去地可以说十分磨心态的。


直接上题:

    function Number() {
        getNumber=function () {
            console.log(0)
        }
        return this;
    }
    Number.getNumber=function () {
        console.log(1)
    }
    Number.prototype.getNumber=function () {
        console.log(2)
    }
    var getNumber=function () {
        console.log(3)
    }
    function getNumber() {
        console.log(4)
    }

    
    Number.getNumber();//静态方法
    getNumber();//普通函数
    Number().getNumber();//执行Number()后执行内部函数
    getNumber();//普通函数
    new Number.getNumber();//静态方法的实例
    new Number().getNumber();//实例对象的方法
    new new Number().getNumber();

正确的答案:

1
3
0
0
1
2
2

第一个Number.getNumber()静态方法,没有任何争议;
第二个getNumber(),则涉及到函数执行的预编译问题,在预编译中执行
如果遇到执行的是function,则会先以查找原型链的方式查找到方法,并执行;但如果想题目这种有function和函数表达式varletconst等,则会先执行function的方法,即上面所说的查找原型链,因此这里先执行了

function  getNumber() {
   console.log(4)
}

而后执行

var getNumber=function () {
  console.log(3)
}

那么,预编译完成后则先执行的function被函数表达式覆盖,而执行的是函数表达式的方法——第一坑
第三个式子Number().getNumber(),当执行Number()后返回了this,此时指向的是Window,则这是相对于执行了this.getNumber(),而内部函数关系式的上下文为window,所以执行内部函数
第四个式子还是执行内部函数,如果看到这还不明白,可以试着把第三个式子拆分为Number()getNumber()再F12调试看this,你就明白了——第二坑
第五个式子new了静态函数,即调用了静态函数
第六个、第七个式子都是实例对象的成员方法


以上均是本人通过个人理解与查阅资料而来,如果有错误的地方请指出,谢谢!!
另外觉得文章写得不错的话可以点赞并关注我哦~

相关文章

  • js大公司面试题——方法执行顺序

    前言 对于方法执行的顺序,讲真在面试时遇到这题目一开始挺开心的,毕竟自己也大概了解,但是这题考察的并不是一个知识点...

  • js运行机制

    js运行机制 在日常面试求职中,不免会做几道面试题,这面试题中往往会遇到js执行输出顺序,而这运行机制是我们每个前...

  • js多个异步请求

    js js多个异步请求,按顺序执行next ES6 方法 参考https://www.cnblogs.com/7q...

  • 滚动视图UIScrollView

    属性 方法 代理方法 拖拽执行顺序 缩放执行顺序

  • js执行顺序

    JavaScript是一种描述型脚本语言,由浏览器进行动态的解析与执行,浏览器对于不同的方式有不同的解析顺序,详细...

  • js执行顺序

  • js代码的异步执行方式

    由于JavaScript的执行环境是单线程的,导致js代码的两种执行方式: 以js代码的先后顺序执行的顺序型 以事...

  • +load +initialize的一点见解

    整体比较 对方法执行顺序的一点见解 这两个方法的执行顺序和一般方法的执行顺序都有些差异,按照普通的方法调用顺序,如...

  • js 标签的属性

    浏览器执行顺序 按顺序解析执行,当遇到 、 时,浏览器开分支执行。 js执行引擎和渲染引擎不会同步执行。

  • JS预解析(变量提升)

    JS预解析(变量提升) JS的正常执行顺序是从上往下依次执行,但是JS在执行之前会读取一遍JS代码 将所有变量声明...

网友评论

    本文标题:js大公司面试题——方法执行顺序

    本文链接:https://www.haomeiwen.com/subject/wdemmctx.html