Heim  >  Artikel  >  Web-Frontend  >  JavaScript-Abschlussanalyse

JavaScript-Abschlussanalyse

一个新手
一个新手Original
2017-09-26 10:27:581145Durchsuche

Als ich zum ersten Mal mit Verschlüssen in js in Berührung kam, war ich später zufällig wieder auf Verschlüsse gestoßen und habe auch viele Erklärungen dazu im Internet gefunden. Eine relativ gute Ressource, hier möchte ich die von mir gelernten Abschlüsse zusammenfassen

Abschluss: Konstruieren Sie eine Funktion innerhalb der Funktion, und dann hat diese Funktion die Fähigkeit, auf externe Funktionsparameter und -variablen zuzugreifen (außer dieser und den Argumenten), was bedeutet, dass alle Funktionen Abschlüsse sind. Der Lebenszyklus interner Funktionen ist länger als der externer Funktionen.

Hier ein wenig über den Umfang von js: JavaScript hat keinen Geltungsbereich auf Blockebene, sondern nur einen Funktionsumfang.

function a() {
        var temp = 0;
    }

Diese temp ist wie eine private Variable der Funktion a, auf die von außen nicht zugegriffen werden kann. Eine Möglichkeit, den Wert von temp zu erhalten, besteht also darin, temp zurückzugeben. Dadurch wird tatsächlich der Wert abgerufen von temp, aber es gibt keine Möglichkeit, temp zu schützen, daher wird temp jedes Mal initialisiert, wenn Sie a() aufrufen, und das Ergebnis der vorherigen Ausführung dieser Funktion wurde bereits von GC freigegeben >

Schauen Sie sich einen Teil des Verschlusscodes an:

function person() {
        var age = 10;
        function get_age() {
            return age+=1;
        }
        return get_age;
    }
    var temp = person();这是一个简单的闭包,在person函数里面构造了一个 get_age的函数,get_age这个函数可以访问person的所有参数和变量(除了this和arguments),并且最后把get_age作为了一个返回值返回.然后temp 的值为person调用的结果 所以temp的值就是get_age(),也就是说在person()中的get_age这个方法还在被使用中,所以GC不会释放person()和get_age()所占用的内存,简单来说:age这个参数不会被释放 会被保存下来.当调用:alert( temp() );alert( temp() );的时候 会输出11和12 也就是说 age = 10并没有被执行.闭包的注意点:既然GC不会回收,所以占用的内存是很大的外部函数的值改变时要注意 可能会影响到闭包中保存的总结: 因为在JavaScript中没有private私有变量的存在,所以想要达到这个效果 使用闭包是很不错的方法,同时可以用于一值保存函数中的变量,使其不会被GC所释放,GC不会自动释放活动的对象(在JavaScript中function也是对象).我想闭包既然是javascript中最好的特性之一,那么自然有他好的地方,具体的好个人认为 需要在实际开发中使用,用来积累经验.

Das obige ist der detaillierte Inhalt vonJavaScript-Abschlussanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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