- js函数的提升
console.log(a)
var a = 3
function a(){}
console.log(a)
输出结果
![](https://img.haomeiwen.com/i12172259/612da6ac9e84381f.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
函数
网友评论