您的位置:首页 > Web前端

前端面试题:企业面试真题—11

2020-08-21 13:30 826 查看
[code]var x = 20;
var a = {
x : 15,
fn : function(){
var x = 30;
return function(){
return this.x;
}
}
};
console.log(a.fn());  //function(){ return this.x; }
console.log((a.fn())());  //20
console.log(a.fn()());   //20
console.log(a.fn()() == (a.fn())());  //true
console.log(a.fn().call(this));  //20
console.log(a.fn().call(a));  //15

 

解析

[code]var x = 20;
var a = {
x : 15,
fn : function(){
var x = 30;
return function(){
return this.x;
}
}
};
console.log(a.fn());  //该函数返回值就是一个函数, 打印结果function(){ return this.x; }
console.log((a.fn())()); //就是把第一行得到的函数调用了, 相当于匿名函数直接调用,this指向window,那么x等于20
console.log(a.fn()()); //跟上面一行没有区别,就是少了括号,并没有影响执行顺序
console.log(a.fn()() == (a.fn())());  //跟上面的一样, 两次的执行结果相同
console.log(a.fn().call(this));  //利用call来调用这个匿名函数, 由于全局的this指向window,相当于call(window),最终结果还是20
console.log(a.fn().call(a)); //call方法将this指向了a对象,最终this.x就是a.x,结果是15

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: