Ecmascript 6 为什么使用let会导致代码块中未定义?
在代码块中运行代码时,会导致“未定义”,然后使用“this”引用代码块中的局部变量 奇怪的是,当删除同一块中的'this'关键字时,打印效果很好Ecmascript 6 为什么使用let会导致代码块中未定义?,ecmascript-6,Ecmascript 6,在代码块中运行代码时,会导致“未定义”,然后使用“this”引用代码块中的局部变量 奇怪的是,当删除同一块中的'this'关键字时,打印效果很好 让productId=12; 如果(真){ 设productId=10 console.log(this.productId)//结果为“未定义” log(this)//结果为{} console.log(productId)//结果为“10” } 给人的印象是“this.productId”将直接引用真实代码块中的productId “this”引
让productId=12;
如果(真){
设productId=10
console.log(this.productId)//结果为“未定义”
log(this)//结果为{}
console.log(productId)//结果为“10”
}
给人的印象是“this.productId”将直接引用真实代码块中的productId
“this”引用代码块中的局部变量
那永远不会发生。如果“本地”和“全球”碰巧是一样的话,情况就是这样
在这里,您可以看到在全局范围内使用var
时它的行为
var foo=“全局”;
函数myFunction(){
var foo=“本地”;
console.log(this.foo);
}
myFunction()代码>
“this”引用代码块中的局部变量
那永远不会发生。如果“本地”和“全球”碰巧是一样的话,情况就是这样
在这里,您可以看到在全局范围内使用var
时它的行为
var foo=“全局”;
函数myFunction(){
var foo=“本地”;
console.log(this.foo);
}
myFunction()
此
与您所在的代码块无关。@tkausl-此
是代码块中的窗口
,如果let
wasvar
将在窗口
对象上创建一个属性。此
与您所在的代码块无关。@tkausl-此
是代码块中的窗口
,如果let
wasvar
将在窗口
对象上创建一个属性。非常感谢,使用下面的代码更改进行了一些测试。通过将this.id='foo'添加到我问题中的代码中,第二个console.log(this)确实显示了它的引用{id:'foo'}。非常感谢,使用代码中的以下更改进行了更多的测试。通过将this.id='foo'添加到我问题中的代码中,第二个console.log(this)确实显示了它的引用“{id:'foo'}”。