美文网首页
函数执行

函数执行

作者: 泪滴在琴上 | 来源:发表于2022-04-14 14:56 被阅读0次
function Foo() {
  getName = function () {
    console.log(1);
  };
  return this;
}

Foo.getName = function () {
  console.log(2);
}

Foo.prototype.getName = function () {
  console.log(3);
}

var getName = function () { 
  console.log(4);
}

function getName() {
  console.log(5)
}

Foo.getName();

getName();

Foo().getName()

getName();

new Foo.getName(); 

new Foo().getName()

new new Foo().getName()

这道题其实就是看你对作用域的关系的理解吧
执行结果:

执行 Foo.getName(), 执行Foo函数对象上的的静态方法。打印出 2

执行 getName(), 就是执行的getName变量的函数。打印 4

为什么这里是 执行的 变量getName,而不是函数getName呢。这得归功于js的预编译
js在执行之前进行预编译,会进行 函数提升 和 变量提升
所以函数和变量都进行提升了,但是函数声明的优先级最高,会被提升至当前作用域最顶端
当在执行到后面的时候会导致getName被重新赋值,就会把执行结果为 4 的这个函数赋值给变量

执行 Foo().getName(), 调用Foo执行后返回值上的getName方法。 Foo函数执行了,里面会给外面的getName函数重新赋值,并返回了this。 也就是执行了this.getName。所以打印出了 1

执行 getName(), 由于上一步,函数被重新赋值。所以这次的结果和上次的结果是一样的,还是为1

执行 new Foo.getName(), 这个 new 其实就是new了Foo上面的静态方法getName 所以是2。 当然如果你们在这个函数里面打印this的话,会发现指向的是一个新对象 也就是new出来的一个新对象

可以把 Foo.getName()看成一个整体,因为这里 . 的优先级比 new 高

执行 new Foo().getName(),这里函数执行 new Foo() 会返回一个对象,然后调用这个对象原型上的getName方法, 所以结果是 3

执行 new new Foo().getName(), 这个和上一次的结果是一样,上一个函数调用后并咩有返回值,所以在进行new的时候也没有意义了。 最终结果也是3

作者:Ali2333
链接:https://juejin.cn/post/7079681931662589960
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • JS基础 -- 立即执行函数

    /** 立即执行函数* 函数定义完,立即被调用,这种函数焦作立即执行函数* 立即执行函数往往只会执行一次** ...

  • js中使用回调函数实现同步执行

    需要先执行的函数 需要后执行的函数 把需要先执行的函数作为参数放到后执行的括号内 执行结果

  • ["1", "2", "3"].map(parseInt) wh

    输出结果 函数的执行顺序 先执行map函数,再执行parseInt函数,map函数返回的参数为(element,i...

  • JS 函数的基础知识

    函数 函数就是重复执行的代码片。 函数定义与执行 // 函数定义 function aa(){ a...

  • 10

    函数 函数就是重复执行的代码片。 函数定义与执行 // 函数定义 function aa(){ a...

  • 2022-10-24 this

    function 函数名(){} //定义函数名() //执行xxx。函数名() //等价执行,xxx就是...

  • 模块、面向对象

    1. 内置函数(下) filter(函数,序列) 执行结果: zip合并列表 执行结果 map(函数,序列) 执行...

  • THIS专题

    专题汇总【this】 this: 函数执行的主体,谁把函数执行的,谁就是函数的执行主体(和函数在哪里定义,在哪里执...

  • 九 立即执行函数

    立即执行函数除了执行完立即释放,跟普通函数没有区别。 返回值,执行期上下文,预编译等函数有的,立即执行函数都是有的...

  • 立即执行函数

    本文涉及知识点 什么是立即执行函数? 立即执行函数有什么用? 什么是立即执行函数? 立即执行函数就是: 声明一个匿...

网友评论

      本文标题:函数执行

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