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
相关产品推荐
相关产品推荐

