[2020-07-17]js变量提升
2020-07-17 本文已影响0人
may505
- js函数的提升
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)
所以最终输出的结果如上
- js原型及全局变量
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
解析:
-
Foo.getName()执行的是Foo.getName函数。 -
getName()其中var getName = function()会覆盖掉function getName() -
Foo().getName(),其中执行Foo()的时候执行了getName = function()相当于又把getName函数给重新赋值定义了,而Foo()返回了this,该this指向window。 -
getName(),由于在步骤3的时候重新定义了getName函数,所以输出也发生了变化 -
new Foo.getName()相当于执行了步骤1的过程。 -
new Foo().getName()执行是Foo原型上的getName函数