国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中的閉包介紹

2024-05-06 16:16:54
字體:
供稿:網(wǎng)友
這篇文章主要介紹了JavaScript中的閉包介紹,本文講解了Javacript 閉包、Javscript 閉包與this、Javscript 閉包與讀寫變量等內(nèi)容,需要的朋友可以參考下
 

所謂的閉包應(yīng)該是指: 內(nèi)部函數(shù)讀取當(dāng)前函數(shù)以外的變量,即創(chuàng)建時(shí)所處的上下文環(huán)境。

復(fù)制代碼代碼如下:

function hello(){
    var char = "hello,world";
    function print(){
        console.log(char);
    };
    return print();
}

需要注意的是這里的print函數(shù)引用了外部hello函數(shù)的char變量,于是在這里我們能夠返回一個(gè)
復(fù)制代碼代碼如下:

hello,world

而這個(gè)功能在某種意義上來說,應(yīng)該是要?dú)w功于作用域。當(dāng)然了,我們沒有辦法直接訪問char,除非是我們聲明這個(gè)變量的時(shí)候出錯(cuò)了。如
復(fù)制代碼代碼如下:

function hello(){
    char = "hello,world";
    function print(){
        console.log(char);
    };
    return print();
}

僅僅是因?yàn)樯倭藗€(gè)var。

 

 

復(fù)制代碼代碼如下:

在這里hello變成一個(gè)閉包 了。 閉包是一種特殊的對(duì)象。它由兩部分構(gòu)成:函數(shù),以及創(chuàng)建該函數(shù)的環(huán)境。環(huán)境由閉包創(chuàng)建時(shí)在作用域中的任何局部變量組成。

 

Javscript 閉包與this

需要注意的是讀取this與arguments時(shí),可能是會(huì)出問題的。

復(fù)制代碼代碼如下:

function hello(){
    this.char = "hello,world";
    function output(){
        char = "I'm no hello world";       
        console.log(this.char);
    };
    return output();
}

當(dāng)然了這個(gè)例子并不夠貼切,so,我們需要一個(gè)額外的例子來解釋這個(gè)問題,下面引用一個(gè)《Javascript高級(jí)程序設(shè)計(jì)》中的一個(gè)例子,來說明這個(gè)問題。
復(fù)制代碼代碼如下:

var name = "The window";

 

var object = {
    name: "My Object",

    getNameFunc: function(){
        return function(){
            return this.name;
        }
    }
};
object.getNameFunc()()


只是這種用法實(shí)在是,而解決方法便是保存一個(gè)臨時(shí)變量that,如之前在《關(guān)于Javascript的this的一些知識(shí)》一文中所說的。

 

 

復(fù)制代碼代碼如下:

var name = "The window";
var object = {
    name: "My Object",

 

    getNameFunc: function(){
        var that = this;
        return function(){
            return that.name;
        }
    }
};
object.getNameFunc()()


Javscript 閉包與讀寫變量
值得注意的是,如果我們沒有處理好我們的變量時(shí),我們也可以修改這些變量。
復(fù)制代碼代碼如下:

function hello(){
    var char = "hello,world";
    return{
        set: function(string){
            return char = string;
        },
        print: function(){
            console.log(char)
        }
    }
}
var say = hello();
say.set('new hello,world') 
say.print() // new hello world

Javascript 閉包與性能

 

引用MDC的說法

復(fù)制代碼代碼如下:

 如果不是因?yàn)槟承┨厥馊蝿?wù)而需要閉包,在沒有必要的情況下,在其它函數(shù)中創(chuàng)建函數(shù)是不明智的,因?yàn)殚]包對(duì)腳本性能具有負(fù)面影響,包括處理速度和內(nèi)存消耗。

文上還說到。
復(fù)制代碼代碼如下:

 例如,在創(chuàng)建新的對(duì)象或者類時(shí),方法通常應(yīng)該關(guān)聯(lián)于對(duì)象的原型,而不是定義到對(duì)象的構(gòu)造器中。原因是這將導(dǎo)致每次構(gòu)造器被調(diào)用,方法都會(huì)被重新賦值一次(也就是說,為每一個(gè)對(duì)象的創(chuàng)建)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 博乐市| 波密县| 万安县| 怀集县| 富锦市| 庄浪县| 竹山县| 廊坊市| 尼玛县| 常州市| 上蔡县| 晋宁县| 建德市| 竹溪县| 辽阳县| 宿迁市| 永年县| 阿克苏市| 景东| 涿州市| 山丹县| 西畴县| 上蔡县| 射洪县| 绥滨县| 原阳县| 乐都县| 通河县| 庐江县| 平舆县| 博爱县| 红桥区| 阿拉善盟| 聂拉木县| 武威市| 南雄市| 清水河县| 天等县| 阳高县| 广德县| 宜春市|