javascript 面试题

(申明:本文转自新浪微博@IT程序猿,附件是原图片)

题一

(function(){var a = b = 5})()
console.log(a);
console.log(b);

 

  输出是 undefined , 5 

  因为 a 是通过var 申明的 但是 b  = window.b  就全局变量 ,但是在严格模式下会报错('use strict'), 另外

  

var a = b = 5 ; 
等价于
b = 5 ;
var a = b ; 

 

 

题二 

原生方法

String.prototype.foo = String.prototype.foo || function(){/..code../}

 

 主要应该是让你不要覆盖原有方法

 

题三

function test(){
    console.log(a);
    console.log(foo());
    var a = 1 ; 
    function foo() { return 2};

}
test()

 

 

运行结果应该是 undefined , 2  原因:变量和函数的申明都被提前了,但是变量没有赋值,因此是Undefined

 

 

题四

var fullName = "C";
var obj = {

    fullName : "A",
    prop:{
         fullName:"B",
         getFullName:function(){
      
                   return this.fullName;
          }

     }

}

console.log(obj.prop.getFullName());

var dd = obj.prop.getFullName;

console.log(dd());

 

 

第一个输出的B 第二个输出的是C,

在第一个console.log()中调用getFullName 的对象是obj.prop 因此this 指向B

在第二个console.log()中调用getFullName 的对象是window 因此this 指向C

 

题五

如何让题目四的log 输出 B 通过call 和apply 强制改变上下文

dd.call(obj.prop)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值