2010-12-08 159 views
1

嗨我想製作動態變量,但它是說變量v0(通過到v5)沒有定義。javascript - 動態變量

td.each(function(i){ 
eval('var v' + i + ' = \'' + $(this).html() + '\';'); 
}); 

任何幫助將不勝感激。

+0

爲什麼?這是爲了達到什麼目的? – 2010-12-08 07:26:01

回答

4

這聽起來像一個壞主意。

是否有任何理由,你不能這樣做呢?

var tdHtml = td.map(function() { return $(this).html(); }).get(); 
+0

因爲`i`將會是一個從零開始的索引,所以不妨將`tdHtml`聲明爲`[] `,因爲這正是陣列的用途。 – 2010-12-08 07:31:07

4

哦,我的。

如果你想創建一個全球性的「動態變量」你不應該使用var。在這種情況下,它創建了一個變量,它是每個函數內部的局部變量,這是非常無用的(並且會導致它在循環外部是不確定的,這正是您正在經歷的)。相反,你應該這樣做:

td.each(function(i){ 
    window['v' + i] = $(this).html(); 
}); 

上述代碼的缺點是全局變量也不是很好。

在另一方面,如果你想有一個局部變量(例如,如果有會在使用該varaible循環更多的代碼,然後我會做這樣的:

td.each(function(i){ 
    var dynVars = {}; 
    dynVars['v' + i] = $(this).html(); 

    alert(dynVars.v4); // use the dynamic variables by saying "dynVars.NAME" 

}); 

你可以結合這兩個解決方案將dynvars(var dynVars = {})的聲明放在您希望能夠訪問變量的範圍內,只要它在每個回調中都可見,則一切都會正常工作。