摘要:以上結(jié)果會(huì)輸出那么可以看到被作為了變量通過傳遞給了匿名函數(shù)作為參數(shù)使用如果去掉的注釋,那么以上結(jié)果會(huì)輸出將上面的函數(shù)改寫為以上結(jié)果會(huì)輸出說明在中第二次為賦值的時(shí)候,并沒有傳遞的到函數(shù)里面去。
??在項(xiàng)目中,難免會(huì)遇到閉包的形式,那么在閉包中,變量的作用域到底是怎么樣的呢。下面有幾個(gè)簡(jiǎn)單的例子。
e1function test_1() { $a = "php"; $func = function ($b) use ($a) { // $a = "java"; echo $b."_".$a; }; return $func; } $test = test_1(); $test("hello");
以上結(jié)果會(huì)輸出 hello_php 那么可以看到 $a 被作為了變量 通過use傳遞給了 匿名函數(shù) func 作為參數(shù)使用;如果去掉$a = "java"的注釋,那么以上結(jié)果會(huì)輸出 hello_java
e2:將上面的函數(shù)改寫為function test_2() { $a = "php"; $func = function ($b) use ($a) { // $a = "go"; echo $b."_".$a; }; $a = "java"; return $func; } $test = test_2(); $test("hello");
以上結(jié)果會(huì)輸出 hello_php 說明在test_2中第二次為$a賦值的時(shí)候,并沒有傳遞的到 func函數(shù)里面去。
同樣的如果去掉 $a = "go";那么以上結(jié)果會(huì)輸出 hello_go
function test_3() { $a = "php"; $func = function ($b) use (&$a) { //$a = "go"; echo $b."_".$a; }; $a = "java"; return $func; } $test = test_3(); $test("hello");
以上結(jié)果會(huì)輸出 hello_java 說明在地址引用的時(shí)候 變量 a 的值會(huì)傳遞到 函數(shù)func里面去。
同樣的如果去掉 $a = "go";那么以上結(jié)果會(huì)輸出 hello_go
以上三個(gè)簡(jiǎn)單的測(cè)試,很明白的說明的閉包里面參數(shù)的作用域。
在沒有使用地址引用的時(shí)候 匿名函數(shù)的變量值,不會(huì)隨著外部變量的改變而改變。(閉包的意義)
在使用了地址引用之后,參數(shù)值會(huì)被外部函數(shù)的參數(shù)值所改變
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29376.html
摘要:深入系列第八篇,介紹理論上的閉包和實(shí)踐上的閉包,以及從作用域鏈的角度解析經(jīng)典的閉包題。定義對(duì)閉包的定義為閉包是指那些能夠訪問自由變量的函數(shù)。 JavaScript深入系列第八篇,介紹理論上的閉包和實(shí)踐上的閉包,以及從作用域鏈的角度解析經(jīng)典的閉包題。 定義 MDN 對(duì)閉包的定義為: 閉包是指那些能夠訪問自由變量的函數(shù)。 那什么是自由變量呢? 自由變量是指在函數(shù)中使用的,但既不是函數(shù)參數(shù)也...
摘要:閉包一詞來源于以下兩者的結(jié)合要執(zhí)行的代碼塊由于自由變量被包含在代碼塊中,這些自由變量以及它們引用的對(duì)象沒有被釋放和為自由變量提供綁定的計(jì)算環(huán)境作用域。在以及及以上等語(yǔ)言中都能找到對(duì)閉包不同程度的支持。 溫馨提示:作者的爬坑記錄,對(duì)你等大神完全沒有價(jià)值,別在我這浪費(fèi)生命 閉包,好吃嗎 ? 第一次聽到這個(gè)詞,很不幸是在一次面試中,可想而知結(jié)果很細(xì)碎,從此閉包和跨域在我匱乏的前端知識(shí)中成為了...
摘要:閉包閉包是什么閉包和匿名函數(shù)在中被引入。可以將匿名函數(shù)和閉包視作相同的概念。閉包和字符串或整數(shù)一樣,是一等值類型。何時(shí)使用我們通常把閉包當(dāng)做函數(shù)和方法的回調(diào)使用。 閉包 閉包是什么? 1).閉包和匿名函數(shù)在PHP5.3中被引入。2).閉包是指在創(chuàng)建時(shí)封裝函數(shù)周圍狀態(tài)的函數(shù),即使閉包所在的環(huán)境不存在了,閉包封裝的狀態(tài)依然存在,這一點(diǎn)和Javascript的閉包特性很相似。3).匿名函數(shù)就...
摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語(yǔ)言,讓我們來看一下語(yǔ)言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時(shí)網(wǎng)上很多人說閉包是難點(diǎn),各種地方對(duì)閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語(yǔ)言,發(fā)現(xiàn)不光是js,php、...
摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語(yǔ)言,讓我們來看一下語(yǔ)言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時(shí)網(wǎng)上很多人說閉包是難點(diǎn),各種地方對(duì)閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語(yǔ)言,發(fā)現(xiàn)不光是js,php、...
閱讀 2243·2019-08-30 10:51
閱讀 796·2019-08-30 10:50
閱讀 1479·2019-08-30 10:49
閱讀 3140·2019-08-26 13:55
閱讀 1608·2019-08-26 11:39
閱讀 3424·2019-08-26 11:34
閱讀 1952·2019-08-23 18:30
閱讀 3390·2019-08-23 18:22