为什么我的全局变量无法识别?



我将一个 3 X 3 矩阵声明为 2D 数组,在函数外部,函数本身找到数组的行列式。单击时,提交按钮将执行行列式函数。但是当我在函数外部声明数组时,它会返回 NaN。不过,当我在函数中声明它时,它工作正常。 PS:这是我的第一个JavaScript程序。 [源代码的相关部分][1]

<!DOCTYPE html>
<html>
<body>
<h1> Solving Matrices </h1>
<form>
<label for="11"> 1,1 </label>
<input type="text" name="txt11" id = "11">
<label for="12"> 1,2 </label>
<input type="text" name="txt12" id = "12">
<label for="13"> 1,3 </label>
<input type="text" name="txt13" id = "13"><br>
<label for="21"> 2,1 </label>
<input type="text" name="txt21" id = "21">
<label for="22"> 2,2 </label>
<input type="text" name="txt22" id = "22">
<label for="23"> 2,3 </label>
<input type="text" name="txt23" id = "23"><br>
<label for="31"> 3,1 </label>
<input type="text" name="txt31" id = "31">
<label for="32"> 3,2 </label>
<input type="text" name="txt32" id = "32">
<label for="33"> 3,3 </label>
<input type="text" name="txt33" id = "33"><br><br>
<input type="submit" value="submit" onclick = "det3()"><br>
<p id = "output"> Output here </p>
</form>
<script>
var matrix =
[
[parseInt(document.getElementById("11").value), parseInt(document.getElementById("12").value), parseInt(document.getElementById("13").value)],  
[parseInt(document.getElementById("21").value), parseInt(document.getElementById("22").value), parseInt(document.getElementById("23").value)],    
[parseInt(document.getElementById("31").value), parseInt(document.getElementById("32").value), parseInt(document.getElementById("33").value)]  ];    
function det3 ()
{

var det = matrix[0][0]*(matrix[1][1]*matrix[2][2]-matrix[1][2]*matrix[2][1]) - matrix[0][1]*(matrix[1][0]*matrix[2][2]-matrix[1][2]*matrix[2][0]) + matrix[0][2]*(matrix[1][0]*matrix[2][1]-matrix[1][1]*matrix[2][0]);
alert(det);
}

</script>
</body>
</html>

这是因为如果您将其定义为全局变量,则脚本会在加载HTML后立即触发,因此每个元素的值都是NaN,如果您执行控制台.log(document.getElementById("11"(.value(,您将看到任何内容都没有打印。 只有在单击按钮时,您才希望获取该值,因此最好在函数中定义矩阵变量,或者如果您真的想使其全局化,请执行类似操作。

<script>
console.log(document.getElementById("11").value)
var matrix =[];
function det3 ()
{
matrix =[
[parseInt(document.getElementById("11").value), parseInt(document.getElementById("12").value), parseInt(document.getElementById("13").value)],  
[parseInt(document.getElementById("21").value), parseInt(document.getElementById("22").value), parseInt(document.getElementById("23").value)],    
[parseInt(document.getElementById("31").value), parseInt(document.getElementById("32").value), parseInt(document.getElementById("33").value)]  ];  
var det = matrix[0][0]*(matrix[1][1]*matrix[2][2]-matrix[1][2]*matrix[2][1]) - matrix[0][1]*(matrix[1][0]*matrix[2][2]-matrix[1][2]*matrix[2][0]) + matrix[0][2]*(matrix[1][0]*matrix[2][1]-matrix[1][1]*matrix[2][0]);
alert(matrix);
}
</script>