问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js闭包和PHP闭包的区别

发布网友 发布时间:2022-04-24 06:35

我来回答

1个回答

热心网友 时间:2022-04-06 06:00

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 描述:
函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 录音的效果好吗,现在还有必要专门买录音笔么 JavaScript 闭包 智能录音笔的录音效果好吗? Javascript中的闭包是什么意思?? 录音笔究竟好不好用呢? javascript另类闭包问题 请问,录音笔有什么用? JavaScript中的闭包是用来做什么的? Js编程语言中,什么叫匿名自我调用函数? WEB前端学习五 什么是闭包 javascript 函数中的匿名函数一定是闭包吗? 如何做好计划生育宣教工作 javascript 为什么要使用匿名函数 或者说 匿名闭包 计划生育协会关于争创“五好小级”“五有小组”的几件好事实事 如何做好计划生育生育服务登记工作总结 大家好,调查社会问题作文 1000字,谢谢 适宜张贴在教室得春联 贴春联的活动过程是什么? 新春佳节,家家户户张贴春联有什么作用? 贴对联的由来和寓意是什么? 录音笔好用吗? 买个录音笔有用吗? JAVASCRIPT中的匿名函数指的是没有名字的函数吗,有何作用啊,在代码文本... 录音笔可以作为法律证据吗 js中闭包是什么意思,有什么作用,最好举例说明啊。 那录音笔什么功能最有用,买的时候需要注意哪些?怎么挑选 javascript中的window.ActiveXObject和闭包是什么意思有什么作用,在... 老罗说的AI录音笔大家有用过吗?录音笔的拾音效果怎么样? 搜狗录音笔录音效果好不好? 讯飞录音笔怎样,有用过的吗? 讯飞智能录音笔录音清晰准确吗?有用过的吗? 智能录音笔学生有用的吗? 高清录音笔真的有用吗 什么牌子的录音笔录音质量最好?怎样知道录音笔效果好,有哪些指标? 微信中的照片怎样插入到美篇制作? 西葫芦是丝瓜吗 怎么把一篇很长的文章制作成吸引人看的美篇 线瓜是什么瓜? 丝瓜炒西葫芦怎么做好吃 东北民间俗称角瓜的疏菜学名叫什么?