【问题标题】:Javascript "variable declared but never used"... even though I'm using it?Javascript“声明但从未使用过的变量”......即使我正在使用它?
【发布时间】:2020-10-10 21:16:36
【问题描述】:

我一定是错过了什么。

在下面的代码中,我清楚地声明了loopingAdjustment,然后在它的正下方,我在fromCharCode 函数中调用它。所以,我正在使用它,对吧?我应该可以调用它,因为它在同一个范围内,对吧?

为什么 VSCode 说它“从未使用过”,为什么我的终端说它“未定义”?

谢谢。

const caesar = function(startingString, shiftAmount) {
    
    let itemizedString = startingString.split('');

    const mappedLetters = itemizedString.map(stringLetter => {
        
        //turn each letter in array into their respective character code
        let thisLetter = stringLetter.charCodeAt(stringLetter);

        // checking if character is alphabetic and converting its charcode back to a letter
        if (thisLetter < 65 || (thisLetter > 90 && thisLetter < 97) || thisLetter > 122) {
            return;
        } else {
            shiftedLetter = thisLetter + shiftAmount;
        }
        
        // making sure the shifted letters loop to beginning, or end, of alphabet
        if (thisLetter > 96 && shiftedLetter > 122) {
            let loopingAdjustment = shiftedLetter - 26;
        } else if (thisLetter > 96 && shiftedLetter < 96) {
            let loopingAdjustment = shiftedLetter + 26;
        } else if (thisLetter < 91 && shiftedLetter > 90) {
            let loopingAdjustment = shiftedLetter - 26;
        } else if (thisLetter < 91 && shiftedLetter < 65) {
            let loopingAdjustment = shiftedLetter + 26;
        } else {
            let loopingAdjustment = shiftedLetter;
        }

        let finalString = String.fromCharCode(loopingAdjustment);

        return finalString;


    });

    console.log(mappedLetters);

    return mappedLetters.join('');

}

module.exports = caesar

【问题讨论】:

    标签: javascript arrays function variables scope


    【解决方案1】:

    您在条件语句中声明 loopingAdjustment,其中 let 有自己的范围。在条件句之外声明它,仅在条件句中更改其值一次。

    【讨论】:

      【解决方案2】:

      这是因为范围而发生的,因为您仅在 if 语句中声明和定义了 loopingAdjustment 变量,因此范围仅限于 if 语句。要解决此问题,您可以在 if 之外声明 loopingAdjustment 并在 if 语句中分配它。您可以从下面的代码中获取参考,您可以修改 acc.满足您的需求。

      const caesar = function(startingString, shiftAmount) {
          
          let itemizedString = startingString.split('');
      
          const mappedLetters = itemizedString.map(stringLetter => {
              
              //turn each letter in array into their respective character code
              let thisLetter = stringLetter.charCodeAt(stringLetter);
      
              // checking if character is alphabetic and converting its charcode back to a letter
              if (thisLetter < 65 || (thisLetter > 90 && thisLetter < 97) || thisLetter > 122) {
                  return;
              } else {
                  shiftedLetter = thisLetter + shiftAmount;
              }
              
              // making sure the shifted letters loop to beginning, or end, of alphabet
              let loopingAdjustment = 0;
              if (thisLetter > 96 && shiftedLetter > 122) {
                  loopingAdjustment = shiftedLetter - 26;
              } else if (thisLetter > 96 && shiftedLetter < 96) {
                  loopingAdjustment = shiftedLetter + 26;
              } else if (thisLetter < 91 && shiftedLetter > 90) {
                  loopingAdjustment = shiftedLetter - 26;
              } else if (thisLetter < 91 && shiftedLetter < 65) {
                 loopingAdjustment = shiftedLetter + 26;
              } else {
                 loopingAdjustment = shiftedLetter;
              }
      
              let finalString = String.fromCharCode(loopingAdjustment);
      
              return finalString;
      
      
          });
      
          console.log(mappedLetters);
      
          return mappedLetters.join('');
      
      }
      
      module.exports = caesar
      

      【讨论】:

      • 哇,谢谢。不敢相信我花了这么长时间才尝试在 if 语句中声明并在外部使用它。
      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多