JavaScript“声明了变量但从未使用过”...即使我正在使用它?

问题描述 投票:0回答:2

我一定是错过了什么。

在下面的代码中,我清楚地声明了

loopingAdjustment
,然后在其正下方的
fromCharCode
函数中调用它。所以,我正在使用它,对吗?我应该能够调用它,因为它在同一范围内,对吗?

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

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
2个回答
0
投票

发生这种情况是因为作用域,因为您仅在 if 语句内声明和定义了loopingAdjustment 变量,因此作用域仅限于 if 语句。要解决此问题,您可以在 if 外部声明循环调整并在 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

0
投票

您在条件语句内声明了loopingAdjustment,其中let具有自己的作用域。在条件语句之外声明它,仅一次,并且仅在条件语句内更改其值。

© www.soinside.com 2019 - 2024. All rights reserved.