• 面试题


    闭包面试题

     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>
  • 相关阅读:
    Ubuntu18.04配置静态ip遇到的报错
    devilbox(二):连接数据库
    DBeaver
    prometheus-operator 详细总结(helm一键安装)
    如何创建私有 CA 并签发证书
    kong如何记录(nginx代理后)真实ip
    节点亲和性添加
    alertmanager详解
    subprocess.call和subprocess.Popen
    dockerfile-ENTRYPOINT 和CMD配合,以及他们的区别
  • 原文地址:https://www.cnblogs.com/fsg6/p/12928566.html
Copyright © 2020-2023  润新知