一道有意思的JS面试题
var name = "The Window";
var object = {
name :"My Object",
getNameFunc:function(){
return function(){
return this.name
}
}
}
console.log(object.getNameFunc()());
这道题答案就是:The Window
我也毫不犹豫的掉进坑里面了-- 苦闷啊 其实这种情况有些人会经常遇到就是会用
var _this = this
我相信这行代码你一定写过
先说一下函数:函数是一种特殊的对象,这个特殊的对象就是window对象,
试试以下代码:
var tt = 10;
sss = 100;
function dd(){
console.log(this);
}
dd();
输出的则是:window对象
那这个时候上面就不难理解了:
return function(){
this.name
}
这个是一个匿名函数不是object对象的属性和成员函数,则匿名函数中的this指向的肯定是window
对象了,this.name 相当于 window.name 上面的那么定义的变量name 是迷惑你的,输出的是
name: "The Window" 在不明白就去查资料吧:主要看下js函数对象和闭包吧
看下一下代码:
var name = "The Window";
var object = {
name :"My Object",
getNameFunc:function(){
var _this = this
return function(){
return _this.name
}
}
}
console.log(object.getNameFunc()()); //输出:My Object
总结:其实也就是this的指向问题
var object = {
name :"My Object",
getNameFunc:function(){
return function(){
return this.name
}
}
}
console.log(object.getNameFunc()());
这道题答案就是:The Window
我也毫不犹豫的掉进坑里面了-- 苦闷啊 其实这种情况有些人会经常遇到就是会用
var _this = this
我相信这行代码你一定写过
先说一下函数:函数是一种特殊的对象,这个特殊的对象就是window对象,
试试以下代码:
var tt = 10;
sss = 100;
function dd(){
console.log(this);
}
dd();
输出的则是:window对象
那这个时候上面就不难理解了:
return function(){
this.name
}
这个是一个匿名函数不是object对象的属性和成员函数,则匿名函数中的this指向的肯定是window
对象了,this.name 相当于 window.name 上面的那么定义的变量name 是迷惑你的,输出的是
name: "The Window" 在不明白就去查资料吧:主要看下js函数对象和闭包吧
看下一下代码:
var name = "The Window";
var object = {
name :"My Object",
getNameFunc:function(){
var _this = this
return function(){
return _this.name
}
}
}
console.log(object.getNameFunc()()); //输出:My Object
总结:其实也就是this的指向问题
