2015-05-21 44 views
1

我有一個變量,我傳入一個函數,並返回其更新的值。語法看起來很相似:通過引用將變量傳遞給函數,並更改它的值?

var myName = 'hello all.'; 

FuncUpperCase(myName); 

function FuncUpperCase(myName) { 
    myName = myName.toUpperCase(); 
    return myName; 
} 

但變量myName似乎並沒有從toUpperCase()值進行修改。

注:我不想寫var newName = FuncUpperCase(myName),因爲我不喜歡這種語法。

+0

@Goodwine他想要一個字符串是大寫。他只是沒有把他的返回值放在var中,這就是爲什麼它不起作用。這不是該帖子的重複。 – Bram

回答

1

這可能會回答你的問題:

Pass a string by reference in Javascript

或者,傳遞一個對象,而不是一個字符串。

var something = {}; 
something.word = "word"; 
var allcaps = function(inp) {inp.word = inp.word.toUpperCase();}; 

allcaps(something); 

//something.word has now been changed 
alert(something.word); 
+0

這個解決方案對我來說聽起來更像是「js-ish」,所以我贊成它 – pinturic

+0

謝謝你,你的代碼是好的。現在擴展這個問題,Lowercase()如何使key對象的某些東西(不是鍵值)遵循該語法。請幫幫我 !!! –

+0

@ĐìnhNhơnLê你應該爲此提出一個新問題。 – Bram

0

在JavaScript中,所有東西都是按值傳遞的。這意味着如果您爲函數中的給定參數重新賦值,則不會修改給定函數範圍之外的值。要理解的另一件重要的事情是對象引用的價值是如何工作的:如果你將一個對象傳遞給一個函數,那麼它也是通過給定的值來實現的,但是如果你訪問這個對象的屬性,那麼實際的對象將被修改除了函數之外,但不是值(也就是說,是對象的引用的值)。


最後,你必須傳遞一個對象到你的函數並修改它的一個屬性,使它保持在外面。

function setToUpperCase(object, key) { 
    object[key] = ('' + object[key]).toUpperCase(); 
    return object[key]; 
} 

而且使用這樣的:

var holder = { word: 'blah' }; 
setToUpperCase(holder, 'word'); 
console.log(holder.word); // BLAH 
+1

'一切都通過價值':假,在你的例子'持有人'通過引用傳遞... – Hacketo

+1

沒有它傳遞的價值,正如我所說的,它發生的價值是對對象的引用。嘗試做'object = {};'它不會改變'object'的值,它會改變引用object的值。 – axelduch

相關問題