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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

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

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

怪我咯

看下 ES6 的书吧:http://es6.ruanyifeng.com/#do...

const 的作用域与 let 命令相同:只在声明所在的块级作用域内有效。

所以 const 出来的值并没有放在 window 对象上。而 var 会。

阿神

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

大家讲道理

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

PHPz

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

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

伊谢尔伦

希望对你有帮助,关于call()和apply()方法:
http://uule.iteye.com/blog/11...

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

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