var a={
name:"Rhona",
check:(function(){
return this.name;
})();
}
console.log(a.check)// This returns ""
一个空字符串,我希望它返回 Rhona,它没有给出 undefined 或 null,而是一个空字符串,这里发生了什么?
而且我也想知道为什么当我访问不存在的对象属性时它给出 undefined 而不是给出 not Define 我认识到 undefined 是在创建阶段赋予变量的值,执行阶段然后初始化该值,所以如果没有初始化,它保持未定义状态,所以当我访问对象属性时,假设a.lastname不存在,java脚本不应该返回未定义,为什么它给出未定义?
最佳答案
IIFE 立即执行(即第一个“I”1)。由于您调用它时没有执行任何特定的操作来设置 this
,因此 this
默认为全局对象(在松散模式下)或 undefined
(在严格模式)。 (参见How does the “this” keyword work?)
您基本上是这样做的,但没有临时变量:
var temp = (function() {
return this.name;
})();
var a = {
name: "Rhona",
check: temp
}
console.log(a.check) // This returns ""
您得到 ""
而不是 undefined
的原因是您使用的是松散模式,因此 this
指的是全局对象,这是浏览器上的窗口,该窗口有一个 name
属性(当前窗口的名称),该属性通常为空 (""
)。
1 “IIFE”中的第一个“I”是“内联”或“立即”,具体取决于您询问的对象。 :-) 例如,“内联调用函数表达式”或“立即调用函数表达式”。
关于javascript - 当指定为对象属性时,IIFE 如何影响其中的此关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50315592/