JS面试题

js综合面试题

首先定义了一个叫Foo的函数,之后为Foo创建了一个叫getName的静态属性存储了一个匿名函数,之后为Foo的原型对象新创建了一个叫getName的匿名函数。之后又通过函数变量表达式创建了一个getName的函数,最后再声明一个叫getName函数。

function Foo() {
    //注意这里没用let var const等命令,所以会被挂到window上
    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); }

//运算符优先级 . > () > new
Foo.getName();//2--不解释
getName();//4--log5的函数声明提升,被log4的覆盖掉
Foo().getName();//1--Foo返回的this是window,window下面原本的getName为log4,但是因为Foo函数执行,又挂载了一个全局getName覆盖掉了log4,所以为1
getName();//1--因为getName被上一行代码修改为了1,所以为1

//考察运算符优先级
new Foo.getName();//2--new (Foo.getName)();
new Foo().getName();//3--(new Foo()).getName()
new new Foo().getName();//3--new ((new Foo()).getName)();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容