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

<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 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()
//覆盖了原来的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()会显示未定义.
</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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值