2013-04-14 15 views
2

我記得:
C++:它會在這種情況下生成100個不同的實例變量(JS vs C++)嗎?

for(int i= 0; i< 100;i++) 
{ 
    int number= 3; 
} 

我們將使用相同的名稱100個不同的實例變量,但在C++變量是塊範圍,所以(但佔用100次存儲器中作爲唯一的一個變量。)當循環結束時,100個變量將被回收。
相反的Javascript:
JS:

for(var i=0; i < 100 ;i++) 
{ 
    var number= 3; 
} 
  1. 就會產生100個不同的變量?或者我們只有一個名爲數字的變量,其值爲3
    我的意思是這些變量實際花費了多少內存?

  2. 如果for循環不是由function(){}包裹,什麼是回收這給變量(一個或多個)的存儲器的機制?

  3. 好吧,那是原始類型變量。如果變量是對象,它會不同嗎?

+1

只是爲了澄清,因爲下面的語句與JS相關,所以關於C++的最初聲明是錯誤的。變量「number」的範圍正好是'{int number = 3}',即每次循環迭代它將被創建和銷燬一次。破壞後,其內存可以重用(並將由任何中途體面的編譯器重用)。所以它不會佔用一個變量的100倍的內存。 –

回答

3

變量在JavaScript中 - 與C - 是功能範圍的,所以你重複使用相同的變量:創建

  1. 只有一個變量。
  2. 如果未包含在函數中,則number將是全局的,但仍將只創建一次。
  3. 這些值無關緊要。變量總是功能範圍。
+0

C編譯器也應該重用數字變量的位置。 –

+0

呃...對於javascript循環:在第一次執行後,我們有一個變量'number',但是由於涉及到第二次執行,它沒有被回收呢〜而在第二次執行中,它又做了同樣的事情。爲什麼我們沒有100個變量? – Stallman

+0

@Eric Jablow我明白了。每次聲明數字時,它都會分配一個內存空間並在每次執行時被回收(塊範圍)。所以不管有多少個執行時間,總是有一個稱爲'number'的整數變量,但我們不能在循環外部使用'number'。我對嗎? – Stallman

相關問題