You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS变量为何需置于函数内?BMI计算器ReferenceError问题咨询

BMI计算代码出现Uncaught ReferenceError的原因及解决

问题描述

运行以下JavaScript代码计算BMI时,触发错误:Uncaught ReferenceError: weight is not defined

function bmiCalculator(weight, height) {
    return weight/(height**2);
}
var bmi = Math.round(bmiCalculator(weight, height));
console.log("My BMI is " + bmi);
 
bmiCalculator(65, 1.8);

将var bmi语句移至函数内部后错误消失,但疑惑为何无法在函数外部定义该变量,原逻辑为:

  • 执行var bmi时,调用bmiCalculator(weight, height)获取输出值并取整,赋值给bmi
  • 打印bmi变量

原因分析

1. 变量作用域不匹配

函数bmiCalculator中的weight和height是函数形参,仅在函数内部作用域有效,外部无法直接引用。

当代码执行到bmiCalculator(weight, height)时,JavaScript会在全局作用域中查找weight和height变量,但你从未在全局范围内定义过这两个变量,因此抛出“变量未定义”的引用错误。

2. 移至函数内部正常的原因

若将var bmi放入函数内部,示例如下:

function bmiCalculator(weight, height) {
    var bmi = Math.round(weight/(height**2));
    console.log("My BMI is " + bmi);
    return weight/(height**2);
}
bmiCalculator(65, 1.8);

此时函数内的weight和height是调用时传入的实参(65和1.8),属于函数内部作用域的有效变量,能正常参与计算,因此不会触发错误。

3. 外部定义变量的正确方式

如果要在函数外部定义bmi,需确保调用bmiCalculator时传入有效的参数——要么提前定义全局变量,要么直接传入具体数值:

方式1:提前定义全局参数变量

function bmiCalculator(weight, height) {
    return weight/(height**2);
}
const weight = 65;
const height = 1.8;
var bmi = Math.round(bmiCalculator(weight, height));
console.log("My BMI is " + bmi);

方式2:直接传入数值

function bmiCalculator(weight, height) {
    return weight/(height**2);
}
var bmi = Math.round(bmiCalculator(65, 1.8));
console.log("My BMI is " + bmi);

内容的提问来源于stack exchange,提问作者Adora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:58:03