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?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
为了保持兼容性,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...