谁能说出为什么在以下情况下全局范围不适用?为什么第6行打印未定义?内部的自动执行功能中不应该使用外部的“ this”吗?
var myObj = {
test1 : 4,
func : function(){
console.log(this.test1); //prints 4
(function(){
console.log("From self-executing function : " + this.test1); //prints undefined
})();
}
};
myObj.func();
尽管如此,在以下情况下,全局作用域仍能正常工作。在外部作用域中声明的test1在内部函数中完全可用。
var test1 = 10;
(function(){
console.log("From self-executing function : " + test1); //prints 10
})();
任何人都可以在这里解释我所缺少的东西吗?
答案 0 :(得分:0)
在内部函数中,this
引用全局对象(如果不是在严格模式下)。
您可以像这样修改代码以达到您期望的结果:
var myObj = {
test1 : 4,
func : function(){
console.log(this.test1);
var self = this;
(function(){
console.log("From self-executing function : " + self.test1);
})();
}
};
myObj.func();