当分配为对象属性时,IIFE 如何影响其中的这个关键字

IT技术 javascript jquery angular reactjs web
2021-05-16 19:57:37
var a={
   name:"Rhona",
   check:(function(){
          return this.name;
            })();
   }
 console.log(a.check)// This returns ""

一个空字符串,我希望它返回 Rhona,它没有给出 undefined 或 null,而是一个空字符串,这是怎么回事?

我也想知道为什么当我访问一个不存在的对象属性时,它给出 undefined 而不是给出未定义我认识到 undefined 是在创建阶段赋予变量的值,执行阶段然后初始化该值,所以如果没有初始化它保持未定义,所以当我访问一个对象属性时,可以说不存在的 a.lastname 不应该 java 脚本返回未定义为什么它给出未定义?

2个回答

IIFE 立即执行(这是第一个“I”¹)。由于您在调用它时没有对 set 做任何特别的事情this,因此this默认为全局对象(在松散模式下)或undefined(在严格模式下)。(参见“this”关键字是如何工作的?

你基本上是这样做的,但没有临时变量:

var temp = (function() {
    return this.name;
})();
var a = {
    name: "Rhona",
    check: temp
}
console.log(a.check) // This returns ""

你得到""而不是undefined因为你使用的是松散模式,所以this指的是全局对象,它是浏览器上的窗口,窗口有一个name属性(当前窗口的名称),它通常是空的 ( "") .


¹ “IIFE”中的第一个“I”是“内联”或“立即”,具体取决于您询问的对象。:-) 例如,“内联调用函数表达式”或“立即调用函数表达式”。

您可以使用getter来实现您想要的:

var a={
   name:"Rhona",
   get check(){
          return this.name;
            }
   }