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);})()

最新文章

  1. Util应用程序框架公共操作类(九):Lambda表达式扩展
  2. sql语句查询最近七天 三十天 数据
  3. 你必须知道的.NET
  4. js之封装sort实现json格式数据的排序
  5. javascript的选项卡
  6. 201521123076 《Java程序设计》第10周学习总结
  7. Linux系统下LNMP一键搭建Linux、PHP、MySQL环境(适合新手搭建linux下的web生成环境)
  8. oracle创建表空间、创建用户并赋予权限
  9. python新手菜鸟之基础篇
  10. hdu 1556 A - Color the ball 其他做法
  11. JS设计模式学习实例之单例模式
  12. [转] fitnesse中的Map处理
  13. Mysql中的delimiter详解
  14. C语言高级程序设计——进制算法以及位算符号
  15. plsql实例精讲部分笔记
  16. C++ 类中的静态成员变量,静态成员函数
  17. C#运算符笔记
  18. Java编码转换
  19. 事务的编写规范与Hibernate绑定session
  20. SZU5

热门文章

  1. LVS _keepalived 配置
  2. etcd注册服务
  3. object in depth
  4. JS面向对象——组合使用构造函数模型与原型模型中的隐患
  5. runtime之归档和解档
  6. 一、Gulp
  7. js 模板引擎 -Art Template
  8. 进程启动到别的session下(作用)
  9. 第6篇如何访问pod
  10. 回收子进程——wait/waitpid 与 信号机制