2010-01-26 116 views
3

我有這樣的代碼:javascript中的全局變量?

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

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

    var jsonLinks = $.toJSON(links); 

它循環後每.LINK它將退出每個環和編碼陣列「鏈接」到JSON。但數組'鏈接'是每個循環內的局部變量。我怎樣才能讓它成爲循環之外的全球?

+0

可能欺騙(http://stackoverflow.com/questions/2138287/global-variable-in-javascript)? –

+1

你的問題出現了兩次。最好刪除這一個。 – kgiannakakis

回答

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(); 
}); 
+0

我不太瞭解地圖功能。我閱讀文檔,但仍然沒有得到它。你能解釋一下發生了什麼嗎? '我'和'val'是什麼?什麼是回報意味着什麼? – ajsie

+0

'map()'將一個函數應用於數組的每個元素。所以這個函數被調用了每個元素。無論結果數組中返回的函數是什麼。回調的參數是i(數字匹配從0開始)和val(數組元素,它也是'this')。 – cletus

2

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

var jsonLinks = $.toJSON(links); 

或者乾脆刪除 '無功':

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

var jsonLinks = $.toJSON(links); 
2

您的代碼塊之前剛剛宣佈它一個全局變量,你可以是

一個)定義一個函數的可變外部(如已經在其他的答案提及)

B)武官可變的窗口對象


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

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

    var jsonLinks = $.toJSON(links); 

c) cr eate的變量,而不var關鍵字


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

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

    var jsonLinks = $.toJSON(links); 

2

創建一個封閉:

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

      links[group] = []; 

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

    var jsonLinks = $.toJSON(links); 
} 
0

定義

var links = []; 

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

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

var jsonLinks = $.toJSON(links); 
0

的JavaScript只能理解兩個作用域

  1. 全球:這是任何變量函數外和變量聲明沒有VAR

  2. 功能:任何在函數內部的東西。

因此,我會建議你關閉方法如下

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