2017-04-17 85 views
0

這裏是代碼不能重新分配它:我已經聲明瞭全局變量,但使用功能

var num = 3 

myFunction(num) 

function myFunction(aNumber) 
{ 
    aNumber = 20 
} 

console.log(num) 

它仍然說,「民」是3,我想知道爲什麼嗎?

+1

JS沒有指針。您將'20'分配給'aNumber'參數,該參數接收當前的num值,但與num不相關。 – 2017-04-17 13:31:39

+0

'myFunction(num)'*從num中讀取值3,並將該值(不是變量)傳遞給myFunction。 'myFunction'在參數'aNumber'中接收該值。 'aNumber的= 20'專賣店在'aNumber'值20,這無論如何對'num'沒有影響,因爲該函數不知道'num'從通話(但通過其他方式做任何事情,但是這沒什麼用'aNumber'參數來做)。 –

+0

'myFunction' *可以*更新'num',通過這樣做'NUM = 20'直接,因爲'myFunction'是在上下文中的封蓋,其'num'定義。如果它*不是在定義了'num'的上下文的閉包,它將不能直接更新它。 –

回答

0

你不必全局變量傳遞到函數來重新分配。

function myFunction() { 
    num = 20 
} 
console.log(num); 
+0

確實如此,但是這個假設函數總是想要改變'num'變量。鑑於原始代碼,它可以改變任何傳入的變量(如果它以這種方式工作的話)。 – 2017-04-17 13:39:43