请教一个有关this作用域的问题,跪求各位大佬指教

YUHUI01 2018-08-05 10:00:37
直接上问题代码了哈
let count = 6;
function foo() {
console.log(this.count);
}
foo.count = 3;
foo();
console.log(foo.count);

以上代码foo函数中的this应该指向全局作用域的吧,那为什么不会使用我在全局中已经定义好的count,而是返回undefined呢?
...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ambit_tsai-微信 2018-08-07
  • 打赏
  • 举报
回复
引用 7 楼 YUHUI01的回复:
[quote=引用 4 楼 ambit_tsai 的回复:]
[quote=引用 3 楼 YUHUI01 的回复:]
[quote=引用 1 楼 ambit_tsai 的回复:]
因为let只能声明块级作用域的变量,只有var才能声明全局变量,所以你得改用var才行

那使用了var,为什么编译器还是会返回undefined呢[/quote]

是可以的,除非你启用了严格模式[/quote]
我想知道,为什么在谷歌浏览器上得到的是全局变量,在VScode编译器上输出的是undefined呢[/quote] 你在vscode下用的应该node.js的环境,node.js不知道从什么时候起,默认是严格模式了。
YUHUI01 2018-08-07
  • 打赏
  • 举报
回复
引用 4 楼 ambit_tsai 的回复:
[quote=引用 3 楼 YUHUI01 的回复:]
[quote=引用 1 楼 ambit_tsai 的回复:]
因为let只能声明块级作用域的变量,只有var才能声明全局变量,所以你得改用var才行

那使用了var,为什么编译器还是会返回undefined呢[/quote]

是可以的,除非你启用了严格模式[/quote]
我想知道,为什么在谷歌浏览器上得到的是全局变量,在VScode编译器上输出的是undefined呢
zc_1994 2018-08-07
  • 打赏
  • 举报
回复
因为es6对let进行了定义,当你let a,并不代表window对象上就有a。es5将全局变量视为window对象的属性在es6里面不成立,比如var a=1;window.a=1,let b=1,window.b=undefined
天际的海浪 2018-08-06
  • 打赏
  • 举报
回复
引用 3 楼 YUHUI01 的回复:
[quote=引用 1 楼 ambit_tsai 的回复:]
因为let只能声明块级作用域的变量,只有var才能声明全局变量,所以你得改用var才行

那使用了var,为什么编译器还是会返回undefined呢[/quote]
必须在全局作用域中用var才能创建全局变量。如果你在函数中用var创建的是局部变量。
最好的方式是
window.count = 6;
ambit_tsai-微信 2018-08-06
  • 打赏
  • 举报
回复
引用 3 楼 YUHUI01 的回复:
[quote=引用 1 楼 ambit_tsai 的回复:]
因为let只能声明块级作用域的变量,只有var才能声明全局变量,所以你得改用var才行

那使用了var,为什么编译器还是会返回undefined呢[/quote]

是可以的,除非你启用了严格模式
YUHUI01 2018-08-06
  • 打赏
  • 举报
回复
引用 1 楼 ambit_tsai 的回复:
因为let只能声明块级作用域的变量,只有var才能声明全局变量,所以你得改用var才行

那使用了var,为什么编译器还是会返回undefined呢
ambit_tsai-微信 2018-08-05
  • 打赏
  • 举报
回复
因为let只能声明块级作用域的变量,只有var才能声明全局变量,所以你得改用var才行

87,838

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧