Eine Grundfunktion:

function myStuff(a,b,c){
    var _c = _c || c || {};
    console.log(_c);
}

Die Idee ist, einen zwischengespeicherten Wert zu verwenden, wenn er zuvor verwendet wurde, oder einen neuen Wert, wenn er neu / anders ist.

Die Frage ist: Wenn die aufgerufene Funktion nicht die dritte Eigenschaft enthält, warum zeigt console.log(_c) undefiniert an oder wie kann ich diese Zeile var _c = _c || c || {}; besser schreiben?

Vielen Dank

2
thednp 20 Aug. 2015 im 17:58

4 Antworten

Beste Antwort

Ich dachte mir. Mit diesem Code if ( c === undefined ) { c = {}; } wird das Problem mit undefiniertem c gelöst:

function myStuff(a,b,c){
  if ( c === undefined ) { c = {}; }
  var _c = _c || c || {};
  console.log(_c);
}

Da

_c = c || _c || {};

Zählt nicht den letzten Fall für {}.

1
thednp 20 Aug. 2015 im 15:55

Sie können den Cache in der Funktion selbst speichern

function myStuff(a,b,c){
    if (!myStuff.cache) {
        myStuff.cache = {};
    }

    var cache = myStuff.cache;
    c = cache.c = cache.c || c || {};

    console.log(c);
}
1
axelduch 20 Aug. 2015 im 15:07

Der Umfang der von Ihnen definierten Variablen ist die Funktion selbst. Daher wird sie bei jedem Aufruf der Funktion neu definiert.

Der richtige Weg, eine Variable zwischenzuspeichern, besteht darin, sie im übergeordneten Bereich der Funktion zu definieren:

var _c;
function myStuff(a,b,c){
    _c = c || _c || {};
    console.log(_c);
}

Weitere Informationen zu js-Bereichen finden Sie hier: Welchen Umfang haben Variablen in JavaScript?

2
Community 23 Mai 2017 im 12:06

Wenn Sie auf den externen Wert _c zugreifen möchten, müssen Sie die folgende Funktion verwenden:

function myStuff(a,b,c){
    var _c = window._c || c || {};
    console.log(_c);
}
1
deFreitas 20 Aug. 2015 im 15:08