为什么这个JavaScript片段返回true?

为什么这个JavaScript片段返回true?,javascript,Javascript,将此示例视为一种心理练习。我不明白为什么它会变成真的。当然,内部的this应该限定在匿名函数的范围内,而外部的this根本与该函数无关 var结果=(函数(){ 归还这个; }())==这个; var el=document.createElement(“div”) el.innerHTML=结果; document.body.appendChild(el)这里没有太多范围,只有“上下文” 由于IIFE是在没有上下文的情况下调用的,因此内部this默认为窗口(ES5“严格模式”中除外),这也是

将此示例视为一种心理练习。我不明白为什么它会变成真的。当然,内部的
this
应该限定在匿名函数的范围内,而外部的
this
根本与该函数无关

var结果=(函数(){
归还这个;
}())==这个;
var el=document.createElement(“div”)
el.innerHTML=结果;

document.body.appendChild(el)
这里没有太多范围,只有“上下文”


由于IIFE是在没有上下文的情况下调用的,因此内部
this
默认为
窗口(ES5“严格模式”中除外),这也是全局范围内
this
的默认值。

这个问题不是关于范围,而是上下文

JS中的上下文(即此上下文)通常设置为调用函数的对象

在这种情况下,没有用户定义的对象调用IIFE,因此它内部的上下文默认为全局对象,因此为true


指定严格模式将导致IIFE内的上下文未定义,从而降低意外全局对象更改的可能性。

console.log(此)
与作用域无关,它取决于调用函数的方式。函数的“this”指的是窗口。哦,亲爱的。为什么“use strict”不会导致抛出错误而不是更改结果的值?因为完全可以(通过
调用
应用
)为该函数提供上下文。不正确的
根据我的经验,这个
总是程序员错误,而不是运行时错误。