Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:;让我们;不在变量中赋值,仅“0”;var";_Javascript_Variables - Fatal编程技术网

Javascript JS:;让我们;不在变量中赋值,仅“0”;var";

Javascript JS:;让我们;不在变量中赋值,仅“0”;var";,javascript,variables,Javascript,Variables,:) 我正在做一个小小的“卡路里计算器”来实践我在JS中学到的东西 我遇到了一些我想理解的东西,下面是我的HTML代码片段: <select id="sex"> <option>Femme</option> <option>Homme</option> </select> 这工作得非常好,但我不得不在JS文件中的“if”语句中用“var”替换“let”。为什么这只适用于

:)

我正在做一个小小的“卡路里计算器”来实践我在JS中学到的东西

我遇到了一些我想理解的东西,下面是我的HTML代码片段:

<select id="sex">
        <option>Femme</option>
        <option>Homme</option>
 </select>
这工作得非常好,但我不得不在JS文件中的“if”语句中用“var”替换“let”。为什么这只适用于“var”?我认为从现在开始使用“let”或“const”更好


如果有人能抽出时间向我解释这一点,我将不胜感激。

在“如果”的范围之外定义新陈代谢

说明:

当你写道:-

if (sex == "Femme"){

    let metabolism = (9.740 * weight + 172.9 * height - 4.737 * age + 667.051).toFixed(0);
}
else {

    let metabolism = (13.707 * weight + 492.3 * height - 6.673 * age + 77.607).toFixed(0);
}
这在“if”块中定义了两个代谢变量,在“else”块中定义了另一个代谢变量。 在“if”或“else”块之外没有代谢变量可用。所以你一定有参考错误


但对于“var”,var不考虑块范围,所以当您在“if”块中定义var时,它在“if”外部、在“if”内部和在“else”内部都可用。它是在全局范围内定义的。

它是一个范围的东西
var
具有全局作用域,而
let
具有块作用域。这意味着
let
const
变量只能在声明它们的块内访问。下面的代码应该可以正常工作

const sex = document.getElementById('sex').value;

    // Basal Metabolism depending sex
let metabolism;
    if (sex == "Femme"){
        metabolism = (9.740 * weight + 172.9 * height - 4.737 * age + 667.051).toFixed(0);
    }
    else {
        metabolism = (13.707 * weight + 492.3 * height - 6.673 * age + 77.607).toFixed(0);
    }
    
    
    // Output for end user
    console.log("Basal metabolism for " + sex + " : " + metabolism);
    }

这是因为
var
获取和
let
const
不获取,更多信息在
let
中是块作用域,
var
是函数作用域。即
let
声明仅在
if
else
块内可见。
var
具有功能范围。(当然,如果没有函数,那么它必须在全局范围内,但这也适用于
let
const
)。非常感谢大家!对不起,我的问题是noob。我在理论课上学到了这一点,但似乎我需要一个真实的例子来真正记住它。下次我不会忘记的,谢谢!
if (sex == "Femme"){

    let metabolism = (9.740 * weight + 172.9 * height - 4.737 * age + 667.051).toFixed(0);
}
else {

    let metabolism = (13.707 * weight + 492.3 * height - 6.673 * age + 77.607).toFixed(0);
}
const sex = document.getElementById('sex').value;

    // Basal Metabolism depending sex
let metabolism;
    if (sex == "Femme"){
        metabolism = (9.740 * weight + 172.9 * height - 4.737 * age + 667.051).toFixed(0);
    }
    else {
        metabolism = (13.707 * weight + 492.3 * height - 6.673 * age + 77.607).toFixed(0);
    }
    
    
    // Output for end user
    console.log("Basal metabolism for " + sex + " : " + metabolism);
    }