javascript - 如何通俗解釋閉包和閉包的作用?

來源:互聯網
上載者:User
關鍵字 php javascript closure 閉包 匿名函數
如何通俗的解釋以下閉包(closure)和閉包在具體項目中的應用執行個體?
php中,

function demo(){    $a=10;    $b=20;    $fun=function() use ($a,$b){        echo $a+$b;    };}demo();

是否和下面作用類似?

class cls{    public $a=10;    public $b=20;    public function fun(){        echo $this->a+$this->b;    }}$obj=new cls;$obj->fun();

一般會在具體項目中什麼情況下使用?能否給出小例子

回複內容:

如何通俗的解釋以下閉包(closure)和閉包在具體項目中的應用執行個體?
php中,

function demo(){    $a=10;    $b=20;    $fun=function() use ($a,$b){        echo $a+$b;    };}demo();

是否和下面作用類似?

class cls{    public $a=10;    public $b=20;    public function fun(){        echo $this->a+$this->b;    }}$obj=new cls;$obj->fun();

一般會在具體項目中什麼情況下使用?能否給出小例子

public 改成 private 就差不多了。

閉包是函數式編程裡面的概念,隨著電腦語言慢慢朝著函數式程式設計語言的的方向發展,很對語言裡都開始支援匿名函數(以及lamada運算式)以及包。匿名函數用途很大,閉包算是為支援 lamada 運算式而存在的。

可是像,Java等這樣的語言,大家給習慣用類寫原來的代碼,在這裡面我覺得使用閉包的話,可以減小代碼量,就這樣!
前幾天,寫過一個關於閉包的草稿,js的
https://segmentfault.com/q/1010000004736461

物件導向進價之函數對象,函數對象又涉及到函數範圍傳遞,閉包簡單從字面上可以理解為封閉範圍打包傳遞。一般的函數返回後函數範圍(函數棧記憶體)消亡,函數調用時產生函數範圍(函數空間入棧)。而閉包產生函數在返回時消亡自身範圍同時又產生新的範圍,新範圍不進棧,造成棧從平級關係出現層次化關係。比如a(普通)函數調用b(閉包產生)函數,b返回c(閉包)函數,函數棧底部是a的範圍,上面是b的範圍,b函數返回,b出棧只剩a,產生的c函數範圍被傳遞到a範圍裡面,出現a範圍包含c範圍,而c的範圍是從b繼承(複製)的,就好像b範圍沒有消亡一樣。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.