首页 > Web开发 > 详细

JS综合面试题1

时间:2019-11-25 22:21:38      阅读:103      评论:0      收藏:0      [点我收藏+]

function foo(){
getName = function () { alert(1); };
return this;
}
Foo.getName = function(){ alert(2); };
Foo.prototype.getName = function(){ alert(3); };
var getName = function(){ alert(4); };
function getName(){ alert(5)};

// 请写出系列的输出结果
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

----分析------

//函数调用前
1、变量提升
先提升 var getName;变量,后提升function getName(){ alert(5);}, 变量名和函数名冲突,变量名将被忽略。
2、函数执行到 getName = function(){ alert(4);}时将重写 全局的getName方法,最终 getName = function(){ alert(4);}

//调用下面的函数执行
Foo.getName(); // 2
getName(); //4
Foo().getName(); //1 该句可写成((Foo()).getName)(), 由于Foo() 修改了全局的getName方法,故 getName = function(){ alert(1); }; 而 Foo()返回值为window,故 最终 window.getName()将 alert出 1
// · 优先级最高,先执行
getName(); //1
new Foo.getName();//2 new (Foo.getName)() --> new (function(){alert(2);})()
new Foo().getName(); //3 (new Foo()).getName() --> foo.getName()调用实例(原型)方法
new new Foo().getName(); //3 new((new Foo()).getName)() --> new (foo.getName)() --> new (function(){alert(3);})()

JS综合面试题1

原文:https://www.cnblogs.com/mengzhongfeixue/p/11930558.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!