Heim >Web-Frontend >js-Tutorial >So ändern Sie Variablen außerhalb des Gültigkeitsbereichs in JavaScript_Javascript-Tipps

So ändern Sie Variablen außerhalb des Gültigkeitsbereichs in JavaScript_Javascript-Tipps

WBOY
WBOYOriginal
2016-05-16 15:08:231781Durchsuche

1. Ich habe heute beim Lesen des JavaScript-Lernführers die außerschulischen Übungen gemacht und daher eine detaillierte und gründliche Untersuchung der in der Funktion übergebenen Parameter durchgeführt.

Das Thema ist wie folgt:

Wie kann eine Funktion Variablen außerhalb ihres Gültigkeitsbereichs ändern? Schreiben Sie eine Funktion, die ein Array von Zahlen von 1 bis 5 als Parameter akzeptiert. Nach dem Aufruf der Funktion werden die numerischen Elemente durch die entsprechenden Zeichenfolgendarstellungen ersetzt

Müssen auf die Wissenspunkte geachtet werden:

Bei der Übertragung von Funktionsparametern in JavaScript haben Änderungen in der Funktion bei der Wertübertragung von Parametern basierend auf Originalwerten keine Auswirkungen auf die tatsächlichen Parameterwerte Die Funktion, Das Objekt ist eine Referenz, und Änderungen daran werden im aufrufenden Programm widergespiegelt.<-Es wird jedoch Situationen wie die folgenden geben


var outer_number = ;
var outer_boolean = true;
var outer_array = [,,];
var outer_object = {test:""};
function display(num,bool,arr,obj){
console.log("number:"+num+"\nboolean:"+bool+"\narray:"+arr+"\nobject:"+obj.test);
}
function test(num,bool,arr,obj){
display(num,bool,arr,obj);//num=,bool=true,array=[,,],object.test=
num = ;
bool = false;
arr[] = ;
obj.test = "";
display(num,bool,arr,obj);//num=,bool=false,array=[,,,],object.test=
arr = [,,];
obj = {test:""};
display(num,bool,arr,obj);//num=,bool=false,array=[,,],object.test=
}
test(outer_number,outer_boolean,outer_array,outer_object);
display(outer_number,outer_boolean,outer_array,outer_object);//num = ,bool=true,array=[,,,],object.test= 
Im obigen Code haben wir 4 globale Variablen erstellt, die Typen sind Zahlen, boolesche Werte, Arrays, Objekte, 2 Funktionen, Anzeige und Test.


display wurde viermal ausgeführt und die Ergebnisse sind wie folgt:


"Nummer:2

boolean:true
array:1,2,3
object:122"<-Der Wert, wenn er an die Funktion übergeben wird

"Nummer:0

boolean:false
array:1,2,3,3
object:134"<-Änderungen durchführen

"Nummer:0

boolean:false
array:3,2,1
object:133"<-Reassign

"Nummer:2

boolean:true
array:1,2,3,3
object:134"<-Nachdem die Funktion ausgeführt wurde

Es ist ersichtlich, dass unsere Neuzuweisung von Arrays und Objekten nicht erfolgreich war. Wenn wir sie als Referenz übergeben, sollten wir auch die Arrays und Objekte globaler Variablen neu zuweisen und ändern.

Tatsächlich ist die sogenannte Zuweisung durch Referenz in JavaScript kein Kopieren durch Referenz im eigentlichen Sinne, sie kann auch als Übergabe per Objekt oder Aufruf per Freigabe bezeichnet werden

Unter dieser Bedingung des Passing-by-Sharing kann man sagen, dass die Referenz, die wir erhalten, nur eine Kopie der tatsächlichen Parameterreferenz ist. Der größte Unterschied zwischen ihr und der Passing-by-Referenz, die wir oft sagen, besteht darin, dass wir sie der Referenzkopie zuordnen Der Wert des Parameters wird nicht beeinflusst, wie wir es oben getan haben, die Zuweisungsoperation ist nicht möglich.


Natürlich betrachten wir sowohl Objekttypen als auch Basistypen. Objekte sind veränderbar und Basistypen sind unveränderlich (Hinweis! Bei der Zeichenfolgenänderung handelt es sich tatsächlich um eine neue zurückgegebene Zeichenfolge), daher gilt die Übergabe durch gemeinsame Nutzung auch für Basistypen mit Lieferung durch Teilen.


Zusammenfassend:


In JavaScript werden sowohl Grundtypen als auch Objekte durch Teilen aufgerufen. Aufgrund der Unveränderlichkeit der Grundtypen von JavaScript gibt es jedoch keinen Unterschied zwischen der Übergabe von Grundtypen durch Teilen und der Übergabe als Wert, während Objekte durch Teilen übergeben werden.


Aufruf durch Teilen: Was übergeben wird, ist eine Kopie der tatsächlichen Parameterreferenz. Unsere Zuweisung zur Referenzkopie hat keinen Einfluss auf den Wert des tatsächlichen Parameters, aber die Referenzkopie kann zum Ändern des referenzierten Inhalts verwendet werden Adresse


Übergebene Funktionsparameter:


1. Grundlegende Typen, die als Wert (oder durch Teilen) übergeben werden. Interne Zuweisungsänderungen wirken sich nicht auf das aufrufende Programm aus.


2. Der Objekttyp wird durch Teilen übergeben. Die interne Zuweisung an die Referenz ist ungültig und die Zuweisungsänderung am Objektattribut ist gültig.


So verstehe ich es wahrscheinlich. Wenn ich irgendwo Fehler mache, hoffe ich, dass ich darauf hingewiesen werden kann.

Ziehen Sie den JavaScript-Bereich unten separat heraus
Jede Programmiersprache hat das Konzept des Bereichs. Einfach ausgedrückt ist der Bereich der zugängliche Bereich von Variablen und Funktionen, das heißt, der Bereich steuert die Sichtbarkeit und den Lebenszyklus von Variablen und Funktionen. In JavaScript gibt es zwei Arten von Variablenbereichen: den globalen Bereich und den lokalen Bereich.


 

Globaler Geltungsbereich
Objekte, auf die überall im Code zugegriffen werden kann, haben einen globalen Gültigkeitsbereich. Im Allgemeinen haben die folgenden Situationen einen globalen Gültigkeitsbereich:


(1) Die äußerste Funktion und die außerhalb der äußersten Funktion definierten Variablen haben einen globalen Gültigkeitsbereich, zum Beispiel:


var authorName="山边小溪";
function doSomething(){
var blogName="梦想天空";
function innerSay(){
alert(blogName);
}
innerSay();
}
alert(authorName); //山边小溪
alert(blogName); //脚本错误
doSomething(); //梦想天空
innerSay() //脚本错误
(2) Alle undefinierten und direkt zugewiesenen Variablen werden automatisch mit globalem Gültigkeitsbereich deklariert, zum Beispiel:

  变量blogName拥有全局作用域,而authorName在函数外部无法访问到。

  (3)所有window对象的属性拥有全局作用域

  一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location、window.top等等。

  1. 局部作用域(Local Scope)  

  和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域,例如下列代码中的blogName和函数innerSay都只拥有局部作用域。

function doSomething(){
var blogName="梦想天空";
function innerSay(){
alert(blogName);
}
innerSay();
}
alert(blogName); //脚本错误
innerSay(); //脚本错误 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn