如何用“let”和“const”替换此代码中的“var”关键字?

Posted

技术标签:

【中文标题】如何用“let”和“const”替换此代码中的“var”关键字?【英文标题】:How do I replace the "var" keywords in this code with "let" and "const"? 【发布时间】:2019-08-31 00:36:51 【问题描述】:

如果我将“var”关键字替换为“let”或“const”,则会收到 userChoice is not defined 错误。

我已经尝试用“let”或“const”替换所有内容。我还将 userChoice 放入一个函数中,并在需要时调用该函数。我还尝试将整个 while 循环放入一个函数中。这些程序与“var”完美配合。

我用“let”和“const”得到的最远的是这个/当我尝试将它放入while循环时它停止工作:

const arrayList = [];
let userChoice = prompt('What would you like to do?');
// Array list is empty array
if (userChoice === "new") 
    let newTodo = prompt('Enter a new todo');
    arrayList.push(newTodo);
 else if (userChoice === "list") 
    console.log(arrayList);

工作代码:

var arrayList = [];
var userChoice = prompt('What would you like to do?');
// Array list is empty array
while (userChoice !== "quit") 
    if (userChoice === "new") 
        var newTodo = prompt('Enter a new todo');
        arrayList.push(newTodo);
     else if (userChoice === "list") 
        console.log(arrayList);
    
    var userChoice = prompt('What would you like to do?');

除非您说“退出”,否则我希望此程序会不断提示。您输入“new”来添加新的待办事项,输入“list”来列出所有待办事项。

【问题讨论】:

请向我们展示您尝试过的替代品。 在倒数第二行,您重新声明了 userChoice。这是笔误吗? 【参考方案1】:

问题是该代码声明了两次userChoice,第二次var 是不必要的:

var arrayList = [];
var userChoice = prompt('What would you like to do?');
// Array list is empty array
while (userChoice !== "quit") 
    if (userChoice === "new") 
        var newTodo = prompt('Enter a new todo');
        arrayList.push(newTodo);
     else if (userChoice === "list") 
        console.log(arrayList);
    
    var userChoice = prompt('What would you like to do?');
//  ^^^---------------------------------------------------- here

var 无关紧要,因为 var 具有函数作用域(或全局作用域,如果在函数外部使用)并且多个声明被忽略,但它与 let 很重要,因为 letblock-scoped,因此在块内声明一个新的userChoice 会影响外部的。 (let 的多个声明是同一范围内的错误,因为这样做没有意义,并且允许这样做会很复杂。)

只需删除第二个var 并将其他vars 替换为let(或者您可以将const 用于arrayListnewTodo,除非未显示的代码将新数组分配给@987654336 @稍后):

const arrayList = []; // Or let
let userChoice = prompt('What would you like to do?');
// Array list is empty array
while (userChoice !== "quit") 
    if (userChoice === "new") 
        const newTodo = prompt('Enter a new todo'); // Or let if you prefer
        arrayList.push(newTodo);
     else if (userChoice === "list") 
        console.log(arrayList);
    
    userChoice = prompt('What would you like to do?');

【讨论】:

以上是关于如何用“let”和“const”替换此代码中的“var”关键字?的主要内容,如果未能解决你的问题,请参考以下文章

如何用另一个数组值替换javascript中的数组值?

关于varlet和const

如何用表格单元格中的参数替换具有历史记录的参数的链接到。

如何用加号“+”号替换空格

如何用 jQuery 替换 innerHTML?

如何用 HttpClient 对象调用或类似方法替换 curl 调用?