call, apply疑惑
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
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩。
ES6入门
看下 ES6 的书吧:http://es6.ruanyifeng.com/#do...
所以
const
出来的值并没有放在window
对象上。而var
会。这个跟call,和apply有关系?
你先
console.log(window.age)
试试var 声明的变量既是全局变量又可以看作是window的全局属性。let和const声明的变量只是变量,不是属性。你这样apply让this指向window,他既然不是window属性自然就返回undefined。
全局中let和const不再添加到window上
希望对你有帮助,关于call()和apply()方法:
http://uule.iteye.com/blog/11...