javascript - 当指定为对象属性时,IIFE 如何影响其中的此关键字

标签 javascript jquery angular reactjs web

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/

相关文章:

html - 保持对背景图像的响应以及完整的拖放元素并响应背景图像

angular - 隐藏/屏蔽辅助路由 Angular 4 的 URL

javascript - 如何在 Angular 应用程序中从 YAML 文件(保存在我的 PC 中)读取数据?

javascript - 如何获取选中的复选框值并将其存储在angularjs中的数组变量中?

jquery - 将上下文传递给回调函数的最佳实践

javascript - 调整 jQuery 字数计数器以将 URL 计为 3 个字

javascript - Datatables fnFilter 延迟加载器/指示器

javascript - Rails 5 simple_form 根据需要标记单选按钮并在未填写时阻止表单提交

javascript - 有关对象中属性存储位置的几个问题

javascript - 为什么需要匿名函数来使用 setTimeout 保留 "this"