Javascript 在自动执行函数中的范围
有人能告诉我为什么全局范围不适用于以下情况吗?为什么第6行打印未定义?外部“this”不应该在内部自执行函数中可用吗Javascript 在自动执行函数中的范围,javascript,self-executing-function,Javascript,Self Executing Function,有人能告诉我为什么全局范围不适用于以下情况吗?为什么第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
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
})();
有人能解释一下我在这里遗漏了什么吗?在内部函数中,
这个
指的是全局对象(如果不是在严格模式下)
您可以像这样修改代码以实现预期的结果:
var myObj = {
test1 : 4,
func : function(){
console.log(this.test1);
var self = this;
(function(){
console.log("From self-executing function : " + self.test1);
})();
}
};
myObj.func();
与函数中的函数有关,您需要将其传递给第二个。不知道具体原因..尝试
console.log(this)
查看这是什么this
value@FZs ... 我试过了,它说“这个”内部函数是“[对象窗口]”,但不明白为什么会这样?为什么在这种情况下外部作用域未激活?您可以绑定第二个函数或使用箭头函数“全局作用域”!=“外部范围”。