何為閉包?
是引用了自由變量的函數(shù)。這個(gè)函數(shù)通常被定義在另一個(gè)外部函數(shù)中启昧,并且引用了外部函數(shù)中的變量。 -- wikipedia
是一個(gè)可調(diào)用的對(duì)象劈伴,它記錄了一些信息密末,這些信息來自于創(chuàng)建它的作用域。-- Java編程思想
是一個(gè)匿名的代碼塊跛璧,可以接受參數(shù)严里,并返回一個(gè)返回值,也可以引用和使用在它周圍的追城,可見域中定義的變量刹碾。-- Groovy
是一個(gè)表達(dá)式,它具有自由變量及邦定這些變量的上下文環(huán)境座柱。
閉包允許你將一些行為封裝迷帜,將它像一個(gè)對(duì)象一樣傳來遞去,而且它依然能夠訪問到原來第一次聲明時(shí)的上下文色洞。
是指擁有多個(gè)變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù))戏锹,因而這些變量也是該表達(dá)式的一部分。
閉包是可以包含自由(未綁定)變量的代碼塊火诸;這些變量不是在這個(gè)代碼塊或者任何全局上下文中定義的锦针,而是在定義代碼塊的環(huán)境中定義。
閉包的價(jià)值在于可以作為函數(shù)對(duì)象或者匿名函數(shù)惭蹂,持有上下文數(shù)據(jù)伞插,作為第一級(jí)對(duì)象進(jìn)行傳遞和保存割粮。
何為Groovy盾碗?
Groovy 是一種動(dòng)態(tài)語言。這種語言比較有特點(diǎn)舀瓢,它和 Java 一樣廷雅,也運(yùn)行于 Java 虛擬機(jī)中。恩?航缀?對(duì)頭商架,簡(jiǎn)單粗暴點(diǎn)兒看,你可以認(rèn)為 Groovy 擴(kuò)展了 Java 語言芥玉。比如蛇摸,Groovy對(duì)自己的定義就是:Groovy 是在 java 平臺(tái)上的、 具有像 Python 灿巧, Ruby 和 Smalltalk 語言特性的靈活動(dòng)態(tài)語言赶袄, Groovy 保證了這些特性像 Java 語法一樣被 Java 。 開發(fā)者使用抠藕。除了語言和 Java 相通外,Groovy 有時(shí)候又像一種腳本語言盾似。前文也提到過,當(dāng)我執(zhí)行Groovy 腳本時(shí)零院,Groovy 會(huì)先將其編譯成 Java 類字節(jié)碼,然后通過 Jvm 來執(zhí)行這個(gè) Java 類门粪。
圖 1 展示了 Java喊积、Groovy 和 Jvm 之間的關(guān)系。
實(shí)際上玄妈,由于 Groovy Code 在真正執(zhí)行的時(shí)候已經(jīng)變成了 Java 字節(jié)碼,所以 JVM 根本不知道自己運(yùn)行的是 Groovy 代碼