【问题标题】:Javascript: How can I access a function-scoped variable within a do while loop?Javascript:如何在 do while 循环中访问函数范围的变量?
【发布时间】:2018-05-21 19:18:57
【问题描述】:

这会检查用户输入。但是,控制台给了我一个错误,说“未定义大小”,我认为这是因为大小在函数内,而 while 条件在函数外

const newGrid = document.getElementById('new-grid');
newGrid.addEventListener('click', createGrid);

const main = document.querySelector('main');

function createGrid() {
    do {
        let size = parseInt(prompt("Please enter a number from 1 to 64", ""), 10);

        const numPx = (600 / size) - 2;
        let px = numPx + 'px';

        for (let i = 0; i < size; i++) {
            for (let j = 0; j < size; j++) {
                const div = document.createElement('div');
                div.setAttribute('class', 'grid');
                main.appendChild(div);
                div.setAttribute('style', `width: ${px}; height: ${px}`);
            }
        }

    } while(isNaN(size) || size > 64 || size < 1);

}

【问题讨论】:

  • 不要使用isNaN,使用容易出错的Number.isNaN
  • @JaredSmith size 是一个数字,所以没关系
  • 看起来从 const numPxdo 块末尾的所有内容都应该放在 while 循环之后?!
  • @Bergi,是的,他们应该这样做,我还有另一个问题是网格无法正确打印出来,尽管我现在正在处理这部分。
  • @Bergi 好习惯就是好习惯。我仍然使用===,即使它并不重要。

标签: javascript function scope do-while


【解决方案1】:

您可以在函数内但在 do 块之外声明变量 (let size;),然后在 do 块内分配它 (size = parseInt(prompt("Please enter a number from 1 to 64", ""), 10);)。

【讨论】:

  • @00Saad 你确定吗?从字面上看,您只需在 do { 上方添加一行 let size 并删除该行之后的 let
  • @vlaz 我犯了一个愚蠢的错误,上面的用户是正确的。
【解决方案2】:

您的选择是:

  • 将其更改为 var(const 和 let 是块作用域,vars 是函数作用域和提升,更多关于 here
  • 更优雅 - 将 let size 更改为 const size(因为您不必重新分配它)并将其向上移动一个级别:

    function createGrid() {
    const size = parseInt(prompt("Please enter a number from 1 to 64", ""), 10);
    

【讨论】:

  • 是的,我在发布后立即注意到,刚刚更正了,谢谢
猜你喜欢
  • 2016-01-24
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 2011-09-16
相关资源
最近更新 更多