zoukankan      html  css  js  c++  java
  • 3道值得收藏的Javascript题目,你理解吗?

    在网上看了几道js的题 整理了一下 贴出来 以供参考

    第一道:

    [javascript] view plaincopy
    1. function foo() {  
    2.        foo.abc = function () { alert('Alibaba') }  
    3.        this.abc = function () { alert('Alimama') }  
    4.        abc = function () { alert('Alipay') };  
    5.        var abc = function () { alert('Taobao') }  
    6.    }  
    7.    foo.prototype.abc = function () { alert('Alisoft'); }  
    8.    foo.abc = function () { alert('Yahoo'); }  
    9.    var obj = new foo();  
    10.    obj.abc();  
    11.    foo.abc();  
    12.    abc();  
    我们就直接针对这输出按顺序进行分析,
    
    
    执行顺序
    1.foo.prototype.abc = function(){alert('Alisoft');}
    //这样之后,我们就可以用obj.abc();不懂prototype原型的,可以看这个prototype原型继承
    2.foo.abc = function(){alert('Yahoo');}
    //alert yahoo
    3.var obj = new foo();
    //创建一个foo的实例obj,同时,执行了foo函数,也就是obj.abc() = function(){alert('Alimama')}
    4.foo.abc = function(){alert('Alibaba')}
    //foo.abc是foo类的静态方法,在实例化foo后执行了代码片段foo.abc = function () { alert('Alibaba') }
    //覆盖了原来的foo.abc = function(){alert('Yahoo');},所以foo.abc()输出alibaba
    5.this.abc = function(){alert('Alimama')}
    //这句话把function(){alert('Alimama')赋给了obj.abc,所以obj.abc输出alimama
    6.abc = function(){alert('Alipay')};
      var abc = function(){alert('Taobao')};
    //这两句一起分析,如果没有下一句,那么abc是个全局变量,abc输出alipay
    //但是因为下一句var abc之后,abc的作用域被限制在foo类里,所以外部的abc()会显示未定义
    

      undefined

    第二道:

    [javascript] view plaincopy
    1. f = function () { return true; };  
    2. g = function () { return false; };  
    3.   
    4. (function () {  
    5.     if (g() && [] == ![]) {  
    6.         f = function f() { return false; };  
    7.         function g() { return true; }  
    8.     }  
    9. })();  
    10.   
    11. alert(f()); // true or false ?  


    答案是false 其实很简单[] == ![]这是两个不同实例的对象, 它们当然不恒等了;其次主要的就是g()是调用的那个方法,它调用局部的 function g() { return true; }而不是全局的 g = function () { return false; }; 所以在这个作用于内 全局的f被覆盖。最终调用的是  f = function f() { return false; };


    第三道:

    1. var o = {  
    2.     m: function() {  
    3.         return this.length;  
    4.     },  
    5.     length: 1  
    6. };  
    7. var m = o.m;  
    8. alert(m()); // 请问输出什么? 并解释为什么。  


    答案是0 这里的this.length 是对象function的length,而不是对象o的length。如   var m = o; alert(m.m()); 答案就是1,原题的意思同如下代码    var a = function () { return this.length; };alert(a());  或则  var a = function () { };alert(a.length);

  • 相关阅读:
    Java中Volatile关键字详解
    java hashmap&concurrentHashmap源理
    java CAS和AQS
    jvm内存模型
    springAop源码分析
    一个项目设置两个git地址,并最终实现一次性同时推送到到两个git地址上的方法总结
    H5实现横向滚动的方法总结
    tab吸顶的神奇-- css粘性属性
    H5制作显示轮播图的方法Swiper
    微信H5中禁止分享好友及分享到朋友圈的方法
  • 原文地址:https://www.cnblogs.com/majiang/p/2539779.html
Copyright © 2011-2022 走看看