javascript - Există o modalitate de a determina dacă un parametru al unei funcții a fost transmis fie ca un literal, fie ca o variabilă?


Am o funcție:

function hello(param){ console.log('param is '+param); }

Și două apeluri. Primul:

hello(123)

Încercare

var a=123; hello(a);

Există vreo modalitate posibilă de a afla, din interiorul funcției hello, dacă param a fost transmis ca var sau ca o valoare literală?

AVIZ: Nu încerc să rezolv o problemă prin asta. Există, desigur, multe soluții alternative, eu pur și simplu am vrut să creez o funcție de logare cu aspect plăcut. Și, de asemenea, am vrut să învăț limitele JavaScript. Mi-a venit această idee, deoarece în JavaScript avem caracteristici ciudate și neașteptate, cum ar fi abilitatea de a obține numele parametrilor unei funcții apelând: function.toString și analizând textul returnat.

Răspuns #1

Nu, primitivele precum numerele sunt transmise prin valoare în Javascript. Valoarea este copiată pentru funcție și nu are legături cu originalul.

Editare: Ce părere ai despre folosirea unui înveliș object pentru a realiza ceva de genul acesta? Nu sunt sigur ce încerci să faci exact.

Ai putea defini un tablou care să conțină obiecte pe care vrei să le urmărești și să verifici dacă se află acolo:

var registry = []  // empty registry
function declareThing(thing){  
   var arg = { value: thing }    // wrap parameter in an object 
   registry.push(arg)    // register object
   return arg;     //return obj
}
function isRegistered(thingObj){  
   return (registry.indexOf(thingObj) > -1)
}

var a = declareThing(123); 
hello(a);

function hello(param){ 
    console.log(isRegistered(param)); 
}