为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在浏览器中打开 index.html 时`this` 与使用节点服务器提供

为什么在浏览器中打开 index.html 时`this` 与使用节点服务器提供

慕田峪4524236 2021-08-20 16:17:38
我有一个 index.html 文件,引用了一个 javascript 文件<!DOCTYPE html><html><head>    <title>asd</title>    <meta charset="utf-8"></head><body>    <div id="app"></div>    <script src="index.js"></script></body></html>在我的index.js 中function init() {    // always prints the window-object    console.log("init this:", this);}var testFunc = () => {    // this = {} when served    // this = window when opened directly in browser    console.log("testFunc this:", this);}// prints the window-object when opening index.html// prints {} when using a serverconsole.log("this:", this);init();testFunc();为什么直接在浏览器(:文件:URL ///index.html)打开index.html文件制作this的window-object所有的时间,同时与服务器服务的index.html文件(网址:HTTP://本地主机:1234/ ) 有时给我{},有时给我window?我希望testFunc()打印{},我希望在window别处得到。为什么不一样?
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

console.log("this:", this);

this在全局执行上下文中引用全局对象。

init();

由于this未在调用中设置且代码未处于严格模式,因此在init函数中它将引用全局对象(在严格模式下,它将具有值undefined)。

testFunc();

由于testFunc是一个箭头函数,所以它的this是从它的封闭范围中采用的,它是全局的,所以又是全局对象。

在浏览器中,window对象是全局对象的别名,并具有附加属性(例如escapeunescape)并实现 window 接口。

在控制台中显示对象时,控制台如何选择表示对象取决于实现。


查看完整回答
反对 回复 2021-08-20
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

this 是对当前代码执行环境中全局对象的引用,所以每次都会不同是正常的。


查看完整回答
反对 回复 2021-08-20
  • 3 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信