js闭包和PHP闭包的区别

JavaScript019

js闭包和PHP闭包的区别,第1张

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 描述:

函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。

一、《web前端开发最佳实践》

这本书是前端开发领域的经典之作,是一本扎实前端基本功,规范我们前端代码的实践性书籍。本书主要讲解了HTML、CSS、JavaScript以及移动端开发的最佳实践方案,能对缺乏良好知道的开发者产生很大的帮助。通过阅读本书我们可以掌握如何编写高可读性、高维护性、高性能的HTML、CSS以及JavaScript。

二、《CSS那些事儿》

《CSS那些事儿是2009年电子工业出版社出版的图书,作者是林小志。该书通过对CSS技巧实例进行讲解,深入地分析了CSS相关知识。

通过页面中的文字、图片、表格、表单等常见元素的处理及各种页面布局方式的使用,使读者能深入了解如何在页面中更好地运用CSS布局。尤其是在页面布局的部分中,全面分析了多重布局方式,着重分解了两列等高和三列等高的几种方式,并相应说明了等高布局的优缺点。

三、《CSS权威指南》

内容介绍:《CSS权威指南》通过诸多示例,详细讲解了如何做到仅在一处建立样式表就能创建或修改整个网站的外观,以及如何得到html力不能及的更丰富的表现效果。同时展示了如何遵循css最新规范(css2和css2.1)将层叠样式表的方方面面应用于实践。

四、《JavaScript 标准参考教程》阮一峰

内容介绍:阮一峰 本书全面介绍 JavaScript 核心语法,从最简单的开始讲起,循序渐进、由浅入深,力求清晰易懂。所有章节都带有大量的代码实例,便于理解和模仿,可以用到实际项目中,即学即用。 本书适合初学者当作JavaScript语言的入门教程,也适合当作日常使用的参考手册。

五、JavaScript高级程序设计第三版

内容介绍:《全书从JavaScript 语言实现的各个组成部分——语言核心、DOM、BOM、事件模型讲起,深入浅出地探讨了面向对象编程、Ajax 与Comet 服务器端通信,HTML5 表单、媒体、Canvas(包括WebGL)及Web Workers、地理定位、跨文档传递消息、客户端存储(包括IndexedDB)等新API,还介绍了离线应用和与维护、性能、部署相关的最佳开发实践。

六、锋利的jquery

内容介绍:《锋利的jQuery(第2版)》循序渐进地对jQuery的各种函数和方法调用进行了介绍,读者可以系统地掌握jQuery的选择器、DOM操作、事件和动画、AJAX应用、插件、jQuery Mobile、jQuery各个版本变化、jQuery性能优化和技巧等知识点,并结合每个章节后面的案例演示进行练习,达到掌握核心知识点的目的。

七、HTTP权威指南

内容介绍:《HTTP权威指南》由古尔利所著,《HTTP权威指南》详细解释了如何用HTTP来开发基于Web的应用程序,核心的[因特网协议,如何与架构构建块交互,如何正确实现因特网客户和服务器等。

《HTTP权威指南》的中心内容是HTTP,本质是理解Web的工作原理,以及如何将这些知识应用到Web编程和管理之中,主要涵盖HTTP的技术运作方式、产生动机、性能和目标以及一些相关技术问题。 《HTTP权威指南》适合所有想了解HTTP和Web底层结构的人阅读。

八、高性能网站建设指南

内容介绍:《高性能网站建设指南》结合Web2.0以来Web开发领域的最新形势和特点,介绍了网站性能问题的现状、产生的原因,以及改善或解决性能问题的原则、技术技巧和最佳实践。重点关注网页的行为特征,阐释优化Ajax、CSS、JavaScript、Flash和图片处理等要素的技术,全面涵盖浏览器端性能问题的方方面面。