在总结 apply()与call()时发现一个问题:let 定义的变量使用 window.xx 的形式使用时打印 undefined ,经过尝试后在此进行小结。
先说结论:
使用 let / const 声明的全局变量,会被绑定到Script对象而不是Window对象,不能以Window.xx 的形式使用;使用 var 声明的全局变量会被绑定到Window对象;使用var / let / const 声明的局部变量都会被绑定到 Local 对象。注:Script对象、Window对象、Local对象三者是平行并列关系。
let num = 1
console.log(this.num)//undefined
console.log(this)//Window 里面没有num属性
//但是使用 var 定义的变量就会绑定到 window 对象上
var num2 = 2
console.log(this.num2) //2
console.log(this) //Window 有num2属性
验证见下代码及结果:
①
let aaa = 111; //Script
const aab = 111;//Script
var aac = 111;debugger //Window
②
let aaa = 111; //Script
const aab = 111; //Script
var aac = 111; //Window
function fn(){
let aad = 111; //Local
const aae = 111; //Local
var aaf = 111;debugger //Local
}
fn();
③
let aaa = 111; //Script
const aab = 111; //Script
var aac = 111; //Window
let obj = {
uu:function(){
let aag = 111;
const aah = 111;
var aai = 111;debugger
}
}
obj.uu()
由②和③还能看出来,局部变量被绑定到 Local 对象上,与调用者即 this 指向无关。