2017-11-30 4 views
0

Wenn ich eine Schließung wie der Code unten habe, wie ich den 'a' Parameter außerhalb der Schließung erhalten kann. JS-Engine-Verwendung Scope-Kette zu bekommen, um den Wert von 'a' zu finden, wenn ich die Schließung aufrufen, aber gibt es eine Chance, den 'a' Wert aus dem globalen Kontext zu bekommen?js closures, Funktionsparameter aus dem globalen Kontext abrufen

function fn(a){ 
    function f(b){ 
    console.log(a + " " + b); 
    } 
    f.a = a; 
    return f; 
} 

So können Sie tun:

function fn(a){ 
    return function f(b){ 
     console.log(a + " " + b); 
    } 
} 

BR, Igor

+0

Warum sollte man das brauchen ??! –

+0

Haha, ich habe jemanden darauf gewartet, das zu schreiben. : D Zum Spaß: D ich spiele mit Schließungen, also möchte ich wissen, ob das möglich ist? Vielleicht eval? –

+0

Eval nicht verwenden! Und das wird hier nicht helfen. Es ist einfach unmöglich –

Antwort

1

Einige Trick würde es die Funktion Objekt werden die Zuordnung

const result = fn(2); 
console.log(result.a, result(2)); 

jedoch ein Verschluss ist es zu Dinge einkapseln. Wenn Sie das nicht wollen, sollten Sie keinen Verschluss verwenden.

+0

Ja, tnx. Das ist gut. Ich habe vergessen, Funktionen sind Objekte, also kann ich den Parameter als Eigenschaft hinzufügen. Aber wiederum gibt es eine andere Möglichkeit, den Eingabeparameter direkt aus dem globalen Kontext zu beziehen, einen Verweis auf den Speicherbereich, in dem alle Variablen für die Gültigkeitsbereichskette vorhanden sind. –

+0

Yep Entwickler-Tools -> Speicher -> Snapshot erstellen -> suchen ... –

0

var count=0; 
 
function add(){ 
 
return count+=1; 
 
} 
 
function sub(){ 
 
return count-=1; 
 
} 
 
function increment(){ 
 
document.getElementById("element").innerHTML=add(); 
 
} 
 
function decrement(){ 
 
document.getElementById("element").innerHTML=sub(); 
 
}
<button type="button" onclick="increment()">Increment!!</button> 
 
<button type="button" onclick="decrement()">Decrement!!</button><br><br><br> 
 
<div id="element"><div>

+0

Increment & Decrest Buttons: Closure ist eine innere Funktion, die Zugriff auf die Variable der Out-Funktion hat, es ist eine Scope-Kette. Der Verschluss hat 3 Umfangsketten. Es hat Zugriff auf seinen eigenen Bereich, es hat Zugriff auf die Variable der äußeren Funktion und es hat Zugriff auf die globale Variable. Nicht nur die Variablen der Access-Funktion, sondern auch die Parameter der Funktion, wie oben erwähnt. –

Verwandte Themen