[2020-07-17]js变量提升

2020-07-17  本文已影响0人  may505
console.log(a)
var a = 3
function a(){}
console.log(a)

输出结果

image.png
解析:我们在定义function a(){}后,会把function a(){}提升到最前面,相当于
function a(){}
console.log(a)
var a = 3
console.log(a)

所以最终输出的结果如上

function Foo(){
    getName = function(){
        console.log(1)
    }
    return this
}
Foo.getName = function(){
    console.log(2)
}

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

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

function getName() {
    console.log(5)
}
Foo.getName() // 2
getName() // 3
Foo().getName() // 1
getName() // 1
new Foo.getName() // 2
new Foo().getName() // 0

解析:

  1. Foo.getName()执行的是Foo.getName函数。
  2. getName()其中var getName = function()会覆盖掉function getName()
  3. Foo().getName(),其中执行Foo()的时候执行了getName = function()相当于又把getName函数给重新赋值定义了,而Foo()返回了this,该this指向window
  4. getName(),由于在步骤3的时候重新定义了getName函数,所以输出也发生了变化
  5. new Foo.getName()相当于执行了步骤1的过程。
  6. new Foo().getName()执行是Foo原型上的getName函数
上一篇 下一篇

猜你喜欢

热点阅读