javascript中的全局变量?

时间:2010-01-26 08:50:54

标签: javascript jquery

我有这段代码:

    $(".link").each(function() {
            group += 1;
            text += 1;
            var links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);

在循环每个.link之后,它将退出每个循环并将数组'links'编码为json。但是数组'links'是每个循环中的局部变量。如何让它在循环之外变得全球化?

6 个答案:

答案 0 :(得分:9)

在循环外定义links

var links = [];
$(".link").each(function() {
  group += 1;
  text += 1;
  links[group] = [];
  links[group][text] = $(this).val();
});
var jsonLinks = $.toJSON(links);

我还应该指出,这并没有多大意义,因为你将最终得到元素7,例如,作为一个数组,其中包含一个元素(索引为7)。这真的是你想要的吗?

我想你想要的是一系列价值观。如果是这样,为什么不使用map()

var links = $(".link").map(function(i, val) {
  return $(val).val();
});

答案 1 :(得分:2)

var links = [];

$(".link").each(function() {
        group += 1;
        text += 1;            
        links[group] = [];

        links[group][text] = $(this).val();
    }
});

var jsonLinks = $.toJSON(links);

答案 2 :(得分:2)

只需在代码块之前声明:

var links = [];
$(".link").each(function() {
        group += 1;
        text += 1;
        links[group] = [];
        links[group][text] = $(this).val();
    }
});

var jsonLinks = $.toJSON(links);

或只是删除'var':

$(".link").each(function() {
        group += 1;
        text += 1;
        links = [];
        links[group] = [];
        links[group][text] = $(this).val();
    }
});

var jsonLinks = $.toJSON(links);

答案 3 :(得分:2)

创建一个闭包:

{    
    var links = [];
    $(".link").each(function() {
            group += 1;
            text += 1;

            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);
}

答案 4 :(得分:0)

要定义全局变量,您可以

a)在函数之外定义变量(如其他答案中已提到的)

b)将变量附加到窗口对象


$(".link").each(function() {
            group += 1;
            text += 1;
            window.links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);

c)创建不带var关键字的变量


$(".link").each(function() {
            group += 1;
            text += 1;
            links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);

答案 5 :(得分:0)

JavaScript只能理解两个范围

  1. 全局:除了 var

  2. 之外,函数和变量之外的任何变量是哪一个?
  3. 功能:功能内的任何内容。

  4. 所以我建议你关闭方法如下

     function getJSONLinks()
     {
          var links = [];
          $(".link").each(function() {
            group += 1;
            text += 1;
            links[group] = [];
            links[group][text] = $(this).val();
           }
         });
         return $.toJSON(links);
     }