Js执行顺序

大家看一些这段代码:

    function Parent3 () {
          this.name = 'parent3';
          this.play = [1, 2, 3];
    }
    Parent3.prototype.say = function(){console.log("aaa")};
    function Child3 () {
          Parent3.call(this);
          this.type = 'child3';
    }
    Child3.prototype = new Parent3();
    var s3 = new Child3();
    var s4 = new Child3();
    s3.play.push(4);
    console.log(s3.play, s4.play,s3.say());    //预期顺序

就是段实现继承的代码,但问题不在这个,下面是代码的执行结果:

mark

为什么先被打印出来的是“aaa”?

阅读 3k
4 个回答

看起来好像也没毛病

aaa是say执行过程中输出的,

而最后一句console是把变量结果和方法执行的结果给打印出来。(执行期肯定先于结果期)

举个简单例子:

clipboard.png

clipboard.png

你是在console.log里面执行了s3.say()当然是先打印这个,然后外面的console.log在打印那两个值。

这个问题你可能理解有误,其实console.log(s3.play, s4.play,s3.say());最后一个值是undefined。
s3.say()没有返回值,相当你去执行了一个函数,是在前几个结果之前执行的。

先执行了s3.say(),输出aaa
然后再执行console.log(),输出s3.play, s4.play和sa.say函数的返回值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题