3道值得收藏的Javascript题目,你理解吗?

来源:互联网 发布:网络社交的利与弊论文 编辑:程序博客网 时间:2024/05/01 07:57
<pre name="code" class="html">

第一道:

function foo(){foo.abc = function(){alert('Alibaba')}this.abc = function(){alert('Alimama')}abc = function(){alert('Alipay')};var abc = function(){alert('Taobao')}}foo.prototype.abc = function(){alert('Alisoft');}foo.abc = function(){alert('Yahoo');}var obj = new foo();obj.abc();foo.abc();abc();


我们就直接针对这输出按顺序进行分析,
执行顺序
1.foo.prototype.abc = function(){alert('Alisoft');}//这样之后,我们就可以用obj.abc();不懂prototype原型的,可以看这个prototype原型继承2.foo.abc = function(){alert('Yahoo');}//alert yahoo3.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()//覆盖了原来的foo.abc = function(){alert('Yahoo');},所以foo.abc()输出alibaba5.this.abc = function(){alert('Alimama')}//这句话把function(){alert('Alimama')赋给了obj.abc,所以obj.abc输出alimama6.abc = function(){alert('Alipay')};  var abc = function(){alert('Taobao')};//这两句一起分析,如果没有下一句,那么abc是个全局变量,abc输出alipay//但是因为下一句var abc之后,abc的作用域被限制在foo类里,所以外部的abc()会显示未定义.
</pre><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; color: rgb(51, 51, 51); font-size: 13px; line-height: 24px; background-color: rgb(255, 255, 255);">

第二道:
</pre><pre name="code" class="html"><span style="font-size:14px;">f = function() { return true; };g = function() { return false; };(function() {    if (g() && [] == ![]) {        f = function f() { return false; };        function g() { return true; }    }})();alert(f()); // true or false ?</span>

第三题:
<span style="font-size:14px;">var o = {    m: function() {        return this.length;    },    length: 1};var m = o.m;alert(m()); // 请问输出什么? 并解释为什么。</span>



0 0
原创粉丝点击