2017-01-02 124 views
1

我做了一個函數「ADD」這改變一個變量的值:功能的「自然語言」

function ADD(xs, n) 
{ 
    var nom_variable = xs; 
    var XS = eval(xs); 

    nouvelle_valeur = eval(nom_variable + "=XS+n"); 
} 

var x = 5 ; 

ADD("x",5); // now x = 10 

我想該函數添加的第一個參數是X,而不是「× 」。這可能嗎 ?

我希望我的學生以類似於自然語言的方式編寫算法。

謝謝!

+1

不,你所問的是不可能的。如果一個值應該是一個字符串,它必須被引用爲一個字符串。 – Pointy

+0

@Pointy:沒有什麼可以用Reflection完成的嗎? – usr2564301

+1

JavaScript是按值傳遞的,而不是通過引用傳遞的,所以這是不可能的。換句話說,'foo(x)'傳遞變量'x'的值,而不是變量'x'的引用。如果'x'的值是'42',那麼函數內部不能區分'foo(x)'和'foo(42)'。就我個人而言,我會完全不同的結構功能。我會讓它接受所有的值作爲輸入並返回值。 –

回答

0

你不可錯過x就好像它是一個參考,但你可以構建功能性引用(或鏡頭),但你仍然不及格x而是一個變量,它的x參考。

var x = 5; 
 
var xRef = { 
 
    get : function(){ 
 
    return x; 
 
    }, 
 
    set : function(val){ 
 
    x = val; 
 
    } 
 
} 
 

 
function add(ref, n){ 
 
    var oldVal = ref.get(); 
 
    ref.set(oldVal+n); 
 
} 
 

 
add(xRef, 5); 
 
console.log(x);

這絕對不是漂亮,雖然。

+0

感謝此代碼 – rognntudjuu