2014-07-27 43 views
0

從我的理解,當你聲明一個變量的語法是這樣的:聲明一個字符串參數變量的JavaScript

var testing = "testing"; 

這是變量聲明。我很困惑我的函數中的聲明如何實際上工作:

function hello(testing){ 
    testing = "this works?" 
    return testing; 
} 
hello('what'); 

我將一個字符串參數傳遞給hello。在我的眼裏,我那麼做這樣的事情的函數內:

"what" = "this works?" 
return "what" 

在這種情況下,標識符是一個字符串。標識符(在這種情況下是「什麼」)類型轉換,它是如何忽略'什麼是字符串?這不應該是一個語法錯誤?

+0

您剛剛將存儲在'testing'中的值從一個值更改爲另一個值。 – Fabricator

+0

變量*將*計算爲一個值,並且重新分配變量會更改其計算的值。 – user2864740

回答

2

你要把握好變量和值之間的差異。

當您調用hello('what')時,您正在將值'what'傳遞給函數。這個值被賦值給變量'testing'。 'testing'是一個變量,它是對內存中包含「what」值的位置的引用,而不僅僅是「what」。因此,該函數可以自由地爲變量測試分配一個新的值(即'this works?'),該值將把該值存儲在內存中的相同位置。

0

函數中的參數是變量。

function hello(testing) { 
    testing = "this works?" 

作品出於同樣的原因爲

var testing; 
testing = "this works?" 
0

你misunderstoud,該testing是可變的,"what"是可變的內部價值,當你做

testing = "this works"; 

你剛纔賦值"this works「給變量testing,而不是價值"what"

2

這是因爲如果你寫了這個:

function hello(var testing) 

var在這裏是自動的,你不能寫它。

一旦你這樣思考,一切都會變得更加清晰。 :)