let cards = ['Diamond', 'Spade', 'Heart', 'Club'];
let currentCard = 'Heart';
while (currentCard !== 'Spade') {
console.log(currentCard);
let currentCard = cards[Math.floor(Math.random() *4)];
}
console.log(currentCard);
这里我关注的是currentCard没有定义的错误,即使我已经全局声明了它。
所以我认为不应该出现错误消息currentCard is not defined
。
答案 0 :(得分:1)
这是因为您已在全局范围和let
循环中使用while
定义了变量。 let
的作用域是块作用域,因此在while循环中的内容与全局作用域不同。
它正在第6行崩溃,console.log
正好在while定义之下。您可以在console.log
下方的行中的while循环中定义变量。因此,Javascript找不到您的变量,因为它尚未定义。
来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
let声明的变量的范围是定义它们的块,以及任何包含的子块。这样,让我的工作非常像var。主要区别在于var变量的范围是整个封闭函数
答案 1 :(得分:0)
您正在while循环中重新定义currentCard。删除额外的让它应该工作。
答案 2 :(得分:0)
您的错误来自while
阻止console
声明。
所以我认为没有定义错误消息currentCard 不应该来。
否,即使您已全局声明currentCard
,您已在while
循环块中重新声明了它,并且在初始化之前访问了它相同即可。
详细了解temporal dead zone。