3道值得收藏的Javascript题目,你理解吗?
发布日期:2021-05-13 07:41:52 浏览次数:19 分类:博客文章

本文共 1389 字,大约阅读时间需要 4 分钟。

第一道:

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原型的,可以看这个
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()会显示未定义.

  alimama   alibaba  undefined

第二道:

 

=
 
function
() { 
return
 
true
; };
=
 
function
() { 
return
 
false
; };
(
function
() {
    
if
 (g() 
&&
 [] 
==
 
!
[]) {
        f 
=
 
function
 f() { 
return
 
false
; };
        
function
 g() { 
return
 
true
; }
    }
})();
alert(f()); 
//
 true or false ?

 

true

第三道:

 

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

 

0

上一篇:加速IE的Javascript的方法
下一篇:ASP.NET性能优化

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月22日 22时39分50秒