闭包浅谈

虽然可能在编码时会经常用到闭包,但对闭包的概念一直比较模糊。

简单说下自己对闭包的理解

  • 闭包的实现方法 
    在我接触的脚本语言有 lua、js、python,感觉语法都差不多,主要特点就是 :
    无需编译、若类型、数据结构强大、灵活多变

    这里随口说下脚本在开发中的优点:

    无需编译,在软件更新时作用很大,由于appstore的审核比较严,如果运行中的游戏应用出现问题时需要更新时,这时候如果等appstore审核那估计要俩星期之后了
    游戏现在大部分的做法就是 游戏上层业务逻辑都用lua写,底层很少变动要求效率高的用C++写,这样在更新版本, 修复bug时就可以让用户在启动时下载需要的脚本直接更新
    从而避开appstore审核所浪费的时间

    若类型,在声明定义一个变量时,不用去声明类型,你只需写个 local 或 var 或什么都不写,类型根据后面赋值确定,当然现在的C++11也支持了这种声明,在参数传递时,不需要指定的类型接收,在C++中类似解决方法就是void*

    数据结构强大,lua 和 js 的table非常强大好用,不仅可以在其中放任意类型数据,当成数组用,还能设置k值当成map用,python的列表字典和元组也是同样好用的

    灵活多变,在使用脚本语言时,就能感觉用起来比较轻量级,不像在用C++时,写什么都要先声明,定义,头文件,繁琐。在使用脚本时,你可以在随便一个复杂类型数据后面 . 出个变量而无需声明,当然这样也带来些问题 有时候都不知道一个变量最先在哪出现的

    上面说了,table里可以放置任何类型数据,而在脚本里,函数也是一种很普通的数据类型 function,在一个table里也可声明函数,如
    tt = {
        a = 10 ,
            b = 10,
            c = function() 
                      print(a..b)
                  end
    }

    闭包函数 我的理解就是 将函数作为返回值赋给另一个变量,这个变量就可以引用函数去执行,函数在执行过程中需要的变量都不会施放,只要还有引用在,即使是局部变量也不会施放。
    达到的效果就是 外部变量可以通过闭包函数访问局部变量  但其实我在工作中用到的并不多

  • 闭包的实际用途
      实际工作中,我经常用到的,应该也就是匿名函数了  在一个按钮上注册一个事件处理函数时 而这个函数要做的事情很简单,那就直接写上匿名函数
  • 各种语言的闭包特点
  • lambda表达式和闭包
    C++11中的lambda表达式和匿名函数一样
时间: 2024-10-14 23:38:18

闭包浅谈的相关文章

6. 闭包浅谈

1. 可以看成是for循环先执行,第一个function中 i 是10. // 这段代码输出的是10个10而不是期望的0到9,因为闭包内是对i的引用,然后函数执行时i已经变成了10 function f1() { for (var i = 0; i < 10; i++) { setTimeout(function() { console.log(i) }, 1000); } } f1(); 2. 第二个function中e 有 i的拷贝(1到10的拷贝) // 解决以上的问题可以采用自执行的匿名

JavaScript闭包浅谈

------------------- 作者:willingtolove: 本文链接:http://www.cnblogs.com/willingtolove/p/4745889.html 1. 变量的作用域: 在javascript中,局部变量的作用域是由它定义的函数决定的,嵌套函数可以访问它的外部作用域的变量. EX1: 1 function hello() { 2 var name = "world"; 3 function hi() { 4 alert(name); 5 } 6

浅谈.NET编译时注入(C#--&gt;IL)

原文:浅谈.NET编译时注入(C#-->IL) .NET是一门多语言平台,这是我们所众所周知的,其实现原理在于因为了MSIL(微软中间语言)的一种代码指令平台.所以.NET语言的编译就分为了两部分,从语言到MSIL的编译(我喜欢称为预编译),和运行时的从MSIL到本地指令,即时编译(JIT).JIT编译分为经济编译器和普通编译器,在这里就不多说了,不是本文的重点.本文主要讨论下预编译过程中我们能做的改变编译情况,改变生成的IL,从编译前后看看微软C#3.0一些语法糖,PostSharp的静态注入

浅谈javascript单体【读javascript设计模式第五章节单体有感】

单体,整个运行环境就独有一份,最简单的一种单体就是一个把所有属性和方法都集中在一起的对象,区别于一般的字面量对象,一般字面量对象是对一个物体的描述,集合该物体所具有的一些属性和方法,而单体则包含更多的些逻辑在里面,单体的好处有,划分命名空间,如果用来作为网页包装器,可以使得页面所有变量都封装在一个对象里,大幅度减小网页里的全局变量, 代码如: common.js (function(wz){ $.extend({ init:function(){ var self = this; this.bi

《浅谈JavaScript系列》系列技术文章整理收藏

<浅谈JavaScript系列>系列技术文章整理收藏 1浅谈JavaScript中面向对象技术的模拟 2浅谈javascript函数劫持[转自xfocus]第1/3页 3浅谈javascript 面向对象编程 4老鱼 浅谈javascript面向对象编程 5浅谈javascript的数据类型检测 6浅谈Javascript嵌套函数及闭包 7根据一段代码浅谈Javascript闭包 8浅谈JavaScript编程语言的编码规范 9浅谈Javascript面向对象编程 10浅谈JavaScript

js---OOP浅谈

js---OOP浅谈 对象化编程-------简单地去理解就是把javascript能涉及到的范围分成各种对象,对象下面再次划分对象.编程出发点多是对象,或者说基于对象.所说的对象既包含变量,网页,窗口等等 对象的含义          对象可以是文字,表单等等.对象包含一下属性-------对象的某些特定的性质方法-------对象能做的事情事件-------能响应发生在对象上的事情     注意:对象只是一种特殊的数据 2.  基本对象                 我们一般划分的角度还是

开发技术--浅谈Python函数

开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 首先介绍函数是什么,接着走进函数,并且发现函数的高级使用方法,最后列出常用的Python的内置函数. 函数是什么? 1.函数,在代码执行的是不执行,只有在调用函数的时候才会执行. 2.函数使用

.net中对象序列化技术浅谈

.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数 据.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象.此外还可以将对象序列化后保存到本地,再次运行的时候可以从本地文件 中“恢复”对象到序列化之前的状态.在.net中有提供了几种序列化的方式:二进制序列化

浅谈——页面静态化

现在互联网发展越来越迅速,对网站的性能要求越来越高,也就是如何应对高并发量.像12306需要应付上亿人同时来抢票,淘宝双十一--所以,如何提高网站的性能,是做网站都需要考虑的. 首先网站性能优化的方面有很多:1,使用缓存,最传统的一级二级缓存:2,将服务和数据库分开,使用不同的服务器,分工更加明确,效率更加高:3,分布式,提供多台服务器,利用反向代理服务器nginx进行反向代理,将请求分散开来:4,数据库的读写分离,不同的数据库,将读操作和写操作分开,并实时同步即可:5,分布式缓存,使用memc