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

本文解析了三道JavaScript面试题,涉及函数作用域、原型链及this指向等核心概念。第一题通过构造函数和原型方法展示了对象属性查找机制;第二题探讨了函数内部this指向和作用域问题;第三题分析了调用函数时this上下文的影响。

第一道:

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()会显示未定义.

  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

转载于:https://www.cnblogs.com/xiaopin/archive/2010/11/19/1881793.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值