面试题

闭包面试题

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <script type="text/javascript">
 9     
10     function Foo() {//函数定义   没调用不管
11         getName = function () { alert (1); };  //这个定义了一个全局函数getName,覆盖了var getName = function () { alert (4);};
12         return this;
13     }
14     Foo.getName = function () { alert (2);};//相当于往函数对象内部添加了一个属性
15     
16     Foo.prototype.getName = function () { alert (3);};//foo函数的显式原型对象 这是给实例化对象用的
17     
18     function getName() { alert (5);}
19     
20     var getName = function () { alert (4);};//  覆盖上边
21     //请写出以下输出结果:
22     Foo.getName();//2    调用函数对象上的方法
23 
24    getName();//4   发生了覆盖 所以输出后边的值
25 
26 // 首先foo作为一般函数执行 因为自身没有getName 所以修改外部(window)的getName
27 //   返回this    这个时候this的指向是全局  所以相当于 window.getName();
28    Foo().getName();//1
29    getName();//1
30    new Foo.getName();//2  当做构造函数使用   最终执行结果
31 
32 //    new foo()先看成一个整体去执行   生成实例化对象  实例化对象的方法就是原型里的方法
33    new Foo().getName();//3
34    new new Foo().getName();//3
35 //    但是不会报错   会先把前边的那个new暂时舍弃
36 //  把第二个new foo() 当做构造函数调用  返回实例化对象
37 //    实例化对象.getName()   这个时候最前边的new就可以执行了
38 //    把这个整体当做了 构造函数调用     new 实例化对象.getName()   只要返回值就可以了
39 </script>
40 </body>
41 </html>

 

posted @ 2020-05-21 09:35  全情海洋  阅读(126)  评论(0编辑  收藏  举报