我有一个 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对象是全局对象的别名,并具有附加属性(例如escape、unescape)并实现 window 接口。
在控制台中显示对象时,控制台如何选择表示对象取决于实现。
添加回答
举报
0/150
提交
取消