2013-05-31 61 views
1

我有三個變量我該如何製作這個簡單的javascript函數?

var r1 = 12; 
var r2 = ''; 
var r3; 

我需要做一個函數convert()有三個參數,所以:

function convert(arg1, arg2, arg3) { 
    // function body here 
} 

使得在運行此代碼

convert(r1, r2, r3) 
console.log(r1, r2, r3) 

我應該得到輸出:

r2, "empty string", "undefined value" 

即它應該將r1,r2和r3的值更改爲上述值。

代碼我想:

function convert(arg1, arg2, arg3) { 
    if (arg2 === '') { 
    arg2 = "empty string"; 
    } 
    if (arg3 === undefined) { 
    arg3 = "undefined value"; 
    } 
} 

,然後調用convert(r1, r2, r3)失敗,因爲參數是以值傳遞(顯然!)。但我需要知道是否有任何方法可以使此功能?另外,我看過this question,所以我知道他們是如何通過的,但是,仍然有什麼辦法可以使這項工作?

+0

我認爲這個問題很清楚:由於參數傳遞的語義,它不是po ssible。你可以傳入一個對象,在這種情況下,在函數返回後,對其屬性的更改將可見,但這就是它。 – Jon

+0

[JavaScript是傳遞引​​用還是傳值語言?]的可能的重複(http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass按值語言) – Jon

+0

@Jon:不,它不是重複的。 – Razort4x

回答

0

你可以做這樣的事情,但最有可能的事情是有缺陷的用你的邏輯。

function convert(arr) { 
    for (var i = 0, l = arr.length; i < l; i++) { 
     // do your stuff here on arr[i] 
    } 
    return arr; 
} 

var a = convert([r1, r2, r3]); 
//a now holds the right values, do whatever you want with them 
//you can even load them back to the variables if that's what you really want 
//r1 = a[0]; etc. 

我不知道什麼是你想要使用這些新的值來做到這一點的原因,但它會更聰明地寫爲只有一個值的轉換功能,並調用它時,它的必要。

function convert(val) { 
    if (val === '') { 
     return 'empty string'; 
    } 
    if (typeof val === 'undefined') { 
     return 'undefined value'; 
    } 
    return val; 
} 

console.log(convert(r1)); 
0

你不能在JavaScript中做到這一點。它沒有傳遞引用語義。

您可以使用此FO的中間目標,但似乎這不是你在找什麼:

var data = {r1: 12, r2: '', r3: undefined}; 
function convert(data, field1, field2, field3) { 
    // … 
} 
+0

請在'評論'部分發表評論。 – Dineshkani

+0

@Dineshkani wut? – kirelagin

+0

'field1','field2','field3'是什麼? – kapa

-1

工作代碼: 火災事件執行功能,你需要


function execute(){ 
    var r1 = 12; 
    var r2 = ''; 
    var r3; 
    convert(r1,r2,r3); 
} 

function convert(arg1, arg2, arg3) { 
    if (arg2 === '') { 
    arg2 = "empty string"; 
    } 
    if (arg3 === undefined) { 
    arg3 = "undefined value"; 
    } 

    console.log(arg1,arg2,arg3); 
// console.log(arg2); 
    // console.log(arg3); 

} 
+0

他希望在你的例子中能夠在'execute()'中擁有新的值。 – kapa

0

在你只需要全局變量轉換萬一,你可以通過在名稱這些變量:

function convert(arg1, arg2, arg3) { 
    if (window[arg2] === '') { 
    window[arg2] = "empty string"; 
    } 
    if (window[arg3] === undefined) { 
    window[arg3] = "undefined value"; 
    } 
} 

var r1 = 12; 
var r2 = ''; 
var r3; 
convert('r1', 'r2', 'r3'); 
console.log(r1, r2, r3); 
相關問題