2010-12-30 12 views
9
(function() { 
    var x = 1; 
    return { 
     f: function (x) { 
      alert(x); 
     } 
    }; 
}()).f(2); 

Angenommen, ich möchte keine Variable umbenennen. Es gibt keine Möglichkeit, innerhalb von f auf die Variable x zuzugreifen, die zuerst deklariert wurde - richtig?Auf Variable im äußeren Bereich zugreifen?

+1

Sie die Variable mit einem Verfahren aussetzen könnte – hunter

+1

Warum Sie nicht wollen Umbenennen Sie eine Variable? – strager

+1

Der Parameter 'x' * shadows * die Variable' x'. Wie in vielen anderen Programmiersprachen (die manchmal aufgelöst werden können, aber in diesem Beispiel nicht). –

Antwort

11

Richtig. Da Sie einen anderen x in haben, wird jeder Versuch, auf x zuzugreifen, diesen (den nächsten Bereich) erhalten. Es blockiert den Zugriff auf alle x in einem weiteren Bereich.

1

Sie konnten die Variable mit der Funktion zurück:

(function() { 
    var x = 1; 
    return { 
     f: function() { 
      alert(this.x); 
     }, 
     x:x 
    }; 
}()).f(); 
1

Es gibt keine Möglichkeit zu, aus f, die Variable x zugreifen, die

Nein, zuerst erklärt wurde, ist es nicht. Der innere Bereich x verbirgt den äußeren Bereich x.

Sie können natürlich keine innere Variable namens "local" haben. ;-)

4

Damit können Sie sowohl x (1) als auch x (2) gleichzeitig verwenden.

(function() { 
    var x = 1; 
    return { 
     f: function (x) { 
      alert(x); // paramter (=2) 
      alert(this.x); // scoped variable (=1) 
     }, 
     x:x 
    }; 
}()).f(2); 
+0

Ein interessanter Ansatz. Vielen Dank! Im wirklichen Leben möchte ich dieses "x" jedoch nicht offen legen. – feklee

0

Aware impliziter async Anrufe, die Sie denken, dass Sie von den äußeren Umfang keinen Zugriff von Variable kann:

result = {} 
jQuery.ajax({ // it is a async call! 
    url: "/some/url", 
    success: function(data) { 
     result = JSON.parse(data); 
    } 
}); 

return result; // Result will be still {} because function returns before request has done. 
Verwandte Themen