javascript - call, apply疑惑
高洛峰
高洛峰 2017-04-11 12:39:10
[JavaScript讨论组]
function foo () {
  console.log(this.age);
}
const age = 18

foo.apply(window) // undefined

为何 用 const/let 定义一个全局变量 age, 并赋值为 18, 用 foo.apply(window)foo.call(window)window.foo() 输出值都是 undefined, 而不是 18 呢? 而用 var age = 18, 结果却为 18?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
大家讲道理

为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩。
ES6入门

阿神

这个跟call,和apply有关系?
你先console.log(window.age)试试

大家讲道理

var 声明的变量既是全局变量又可以看作是window的全局属性。let和const声明的变量只是变量,不是属性。你这样apply让this指向window,他既然不是window属性自然就返回undefined。

PHPz

全局中let和const不再添加到window上

从ES6开始,全局变量将逐步与顶层对象的属性脱钩。
去看顶层对象的属性部分

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号