Javascript变量范围混淆

Javascript变量范围混淆,javascript,Javascript,关于范围,我有一个小问题。在下面的程序中,我在.js文件中声明了两个变量:countRows和countCols。在saveTable()中。但是,当我记录它们时,在函数之后,它们的值为0 为什么它们不从函数中保留它们的值 var table = document.getElementById("table"); var countRows = 0; var countCols = 0; function saveTable() { countRows = table.rows.leng

关于范围,我有一个小问题。在下面的程序中,我在.js文件中声明了两个变量:countRows和countCols。在
saveTable()中
。但是,当我记录它们时,在函数之后,它们的值为0

为什么它们不从函数中保留它们的值

var table = document.getElementById("table");
var countRows = 0;
var countCols = 0;

function saveTable() {

  countRows = table.rows.length;
  countCols = table.rows[0].cells.length;

  var data = "";

  for(var i = 0; i < table.rows.length; i++) {
    for(var j = 0; j < table.rows[i].cells.length; j++) {
      data += table.rows[i].cells[j].innerHTML + ",";
    }
  }
  document.cookie = data;
}

console.log(countRows); //These equal 0
console.log(countCols);
var table=document.getElementById(“表”);
var countRows=0;
var countCols=0;
函数saveTable(){
countRows=table.rows.length;
countCols=table.rows[0].cells.length;
var数据=”;
对于(var i=0;i
您必须调用该函数

var table = document.getElementById("table");
var countRows = 0;
var countCols = 0;

function saveTable() {

  countRows = table.rows.length;
  countCols = table.rows[0].cells.length;

  var data = "";

  for(var i = 0; i < table.rows.length; i++) {
    for(var j = 0; j < table.rows[i].cells.length; j++) {
      data += table.rows[i].cells[j].innerHTML + ",";
    }
  }
  document.cookie = data;
}
// Call the function
saveTable();
console.log(countRows); //These equal 0
console.log(countCols);
var table=document.getElementById(“表”);
var countRows=0;
var countCols=0;
函数saveTable(){
countRows=table.rows.length;
countCols=table.rows[0].cells.length;
var数据=”;
对于(var i=0;i
要添加到@Steven Stark answer中,发生这种情况是因为在记录变量之前没有调用函数,它们在这里共享作用域。示例如下:

设a=0;
//这将更改a,因为函数直接访问父范围中声明的a
函数changeA(){
a=3;
}
changeA();
控制台日志(a)
//这丝毫没有改变
功能更改参数(a){
//因为此“a”仅存在于此函数的作用域中
a=5;
}
改变参数(a);

控制台日志(a)
您的
控制台。log
在您的函数之外对其进行编码,这意味着它在函数定义之后立即执行。而不是在执行了
之后
啊,是的,谢谢你,先生@史蒂文斯塔克:张贴答案?