文章目录
最近遇到一个有意思的js相关的题目,看了网上的一些讲解,感觉不是那么靠谱。自己查阅资料后,做了一下总结。
题目
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();//2
getName(); //4
Foo().getName(); //1
getName(); //1
new Foo.getName(); //2
new Foo().getName(); //3
new new Foo().getName(); //3
最后的输出结果,我已经在代码的注释中写了,下面我开始对这7个输出结果进行一一分析。
分析
1. Foo.getName()
这个很简单了,取的是构造函数Foo的getName属性
2 .getName
这里涉及到了变量提升的相关知识,我们把代码进行一下更改
var getName = function(){
console.log(4)
}
function getName(){
console.log(5)
}
更改如下
var getName;
function getName(){

本文通过一道JavaScript面试题,详细分析了运算符优先级,包括Foo.getName()、getName()、Foo().getName()等不同情况的执行逻辑。重点讨论了new运算符与函数调用的关系,以及new new Foo().getName()的执行顺序。通过对运算符优先级的理解,揭示了new运算符的'贪婪'特性。
最低0.47元/天 解锁文章
901

被折叠的 条评论
为什么被折叠?



