對比php閉包與js閉包(PHP 閉包)

本文目錄一覽:

php閉包和js閉包的區別

閉包就是能夠讀取其他函數內部變量的函數 js的閉包和php的閉包概念和原理都是一樣的只是語言不同而已

如何實際使用PHP5.3閉包語法特性

PHP 5.3閉包語法就是一個匿名函數,可以為開發者帶來很多不同的體驗。與JavaScript的閉包相比稍微有點不同,可以這樣使用PHP 5.3閉包語法

$closure = function($param) { echo $param; };

//This one takes value of someVar and “stores” it in the closure’s scope even if

//we later change the value of someVar outside it. We assume that $somerVar is defined before this

$closure2 = function($param) use ($someVar) { echo $param . ‘ ‘ . $someVar; };

比如PHP 5.3閉包語法在輸出HTML中閉包很有用:

function item_list(array $items, $formatter = null) {

//create the default formatter

if($formatter == null) {

$formatter = function($row) {

return ‘p’ . $row . ‘/p’;

};

}

$html = ‘h2Listing:/h2’;

foreach($items as $item) {

$html .= $formatter($item);

}

return $html;

}

以上就是介紹的兩種不同的PHP 5.3閉包語法的使用

js閉包和PHP閉包的區別

1 什麼是閉包

php:你跟我聊閉包之前啊,首先來聊聊 匿名函數(Anonymous function)下面就是一個匿名函數的栗子,匿名函數 顧名思義就是沒有名字啊。。

(PHP在引入閉包之前,也有一個可以創建匿名函數的函數:create function,但是代碼邏輯只能寫成字符串,這樣看起來很晦澀並且不好維護,所以很少有人用。)本人沒有驗證~~

$func = function(){

}; //帶結束符(一定要帶)

實現閉包

將匿名函數在普通函數中當做參數傳入,也可以被返回。這就實現了一個簡單的閉包。

(閉包可以保存所在代碼塊上下文的一些變量和值。PHP在默認情況下,匿名函數不能調用所在代碼塊的上下文變量,而需要通過使用use關鍵字。所以下面的一段函數會報錯 undefined variable a )

function add($a)

{ $a = $a; $fun1 = function ($b=2)

{ echo $a+$b; };

return $fun1; }

$fun1 = add(21);

$fun1(6);

如果想使用 $a 怎麼辦。php 是見招拆招啊。 關鍵字 use:

function add($a)

{ $a = $a; $fun1 = function ($b=2) use ($a) //只需要一個use($a)

{ echo $a+$b; };

return $fun1; }

$fun1 = add(21);

$fun1(6); //27

那麼能否在匿名函數中改變上下文的 變量呢 來做個試驗吧

function add($a) { // $a = $a; $fun1 = function ($b=2) use ($a) { echo $a; $a++; }; $fun1(); echo $a; }

$fun1 = add(21);

//2121 哦 很遺憾 傳值是不行的

那來試試 傳引用吧

function add($a) { // $a = $a; $fun1 = function ($b=2) use ($a) { echo $a; $a++; }; $fun1(); echo $a; }

$fun1(6); //2122 哦 可以的

使用use 關鍵字匿名函數就可以引用上下文的變量了。如果將匿名函數返回給外界,匿名函數會保存use所引用的變量,而外界則不能得到這些變量,這樣形成‘閉包’這個概念可能會更清晰一些。(也就是說 use 所引用的變量 會一直保存在內存中,直到顯示銷毀 這是閉包的一大特點)

javascript:你們php弱爆了。我們js可以直接調用 函數外部的變量。來嘮嘮js的閉包吧。

先來聊聊 js的變量作用域吧。1 全局變量,2局部變量(var vname)

阮一峰前輩說:js的閉包可以簡單的理解為,能夠獲取函數外部的變量的函數,就叫閉包。

一是讀取函數內部的變量,

二是讓這些變量的值保存在內存中,實現數據共享

閉包就是能夠讀取其他函數內部變量的函數。

由於閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。

2)閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變量的值。

注意:::在javascript里,在函數里聲明的函數都是局部的,函數運行完後就釋放了

ECMAScript 描述:

函數定義和函數表達式位於另一個函數的函數體內。而且,這些內部函數可以訪問它們所在的外部函數中聲明的所有局部變量、參數和聲明的其他內部函數。當其中一個這樣的內部函數在包含它們的外部函數之外被調用時,就會形成閉包。也就是說,內部函數會在外部函數返回後被執行。而當這個內部函數執行時,它仍然必需訪問其外部函數的局部變量、參數以及其他內部函數。這些局部變量、參數和函數聲明(最初時)的值是外部函數返回時的值,但也會受到內部函數的影響。

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130576.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:29
下一篇 2024-10-03 23:29

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • JS圖片沿着SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿着SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27

發表回復

登錄後才能評論