闭包

Swift2.0语言教程之闭包

坚强是说给别人听的谎言 提交于 2019-12-05 09:46:56
Swift2.0语言教程之闭包 Swift2.0语言 闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C 中的代码块( blocks )以及其他一些编程语言中的 Lambda 函数比较相似。在本章中所讲的函数其实就是特殊的闭包。本节主要讲解关于闭包的基本使用。 Swift2.0语言 闭包表达式 闭包表达式是一种利用简洁语法构建内联(内联类似与 C 语言中的宏定义)闭包的方式。以下这个代码是对两个字符串的比较。 import Foundation // 判断两个字符串的大小 func compare(s1: String, s2: String) -> Bool { return s1 > s2 } let str1="Hello" let str2="Swift" if compare(str1, s2: str2) { print("str1 大于 str2") }else{ print("str1 小于 str2") } 运行结果如下: str1 小于 str2 在此代码中,当调用函数 compare() 时,会将 str1 和 str2 传递到给函数在定义时的参数 s1 , s2 中,然后进行比较。在此代码中可以看到,在 compare() 函数中执行了一行代码,就是判断并返回,显的此函数相当冗长

面试题总结

你离开我真会死。 提交于 2019-12-05 09:29:54
什么是闭包?为什么使用?简述闭包的优点和缺点 外部函数嵌套内部函数,内部函数在外部调用 重用一个变量,并且保证该变量不被污染 解决全局变量和局部变量都具有不可兼得的优缺点 全局变量:可重用但是容易被污染 局部变量:仅在函数内部可用,不会被污染,不可重用 闭包的缺点:   比普通函数占用更多的内存。   解决:闭包不在使用时,要及时释放。   将引用内层函数对象的变量赋值为 null 。 什么是回流( reflow)和重绘(repaint)? 回流:浏览器在渲染页面的时,某个部分发生了变化影响了网页的布局 重绘:不改变元素的内部布局 重排: DOM 的结构发生改变 浏览器渲染器页面的过程 1. 解析 HTML 文件,创建 DOM 树 2. 解析 CSS 3. 将 CSS 和 DOM 合并,构建渲染树 4. 进行布局和绘制(重排和重绘) 什么是同源策略 域名,协议,端口号相同,所有支持 javascript 的浏览器都会执行这个策略 什么是跨域 一个域的页面去请求另一个域的资源 jsonp的原理 动态添加一个 script 标签,通过 script 的 src 属性,向服务器请求数据,返回数据并执行回调函数 什么是内存泄露,怎么防止 垃圾回收机制就是为了防止内存泄漏的,内存泄漏的含义就是不需要某块内存时他依旧还存在,垃圾回收机制就是寻找不在使用的变量并释放他们的内存

javascript闭包详解

江枫思渺然 提交于 2019-12-05 08:33:49
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。    var n=999;   function f1(){     alert(n);   }   f1(); // 999    另一方面,在函数外部自然无法读取函数内的局部变量。    function f1(){     var n=999;   }   alert(n); // error    这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!    function f1(){     n=999;   }   f1();   alert(n); // 999    二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。 那就是在函数的内部,再定义一个函数。    function f1(){     var n=999;    

第二月 day3 闭包,递归

会有一股神秘感。 提交于 2019-12-05 06:05:00
1. 不断调用自己本身(自己调用自己)——死循环 最大层次1000,实际测试997/998 2 . 有明确的终止条件 满足以上两个才是 有效递归。 递 :一直执行直到碰到结束条件 归 :从结束条件开始往回退 最大递归深度998 • 1 . 闭包是嵌套在函数中的函数。 • 2 .闭包必须是内层函数对外层函数变量(非全局变量)的引用。 • 3. 外层函数返回内层函数名 •闭包的作用 :保存局部信息不被销毁,保证数据的安全性。 •闭包的应用 :装饰器 来源: https://www.cnblogs.com/wyfmc/p/11909508.html

通过javascript 执行环境理解她

扶醉桌前 提交于 2019-12-05 02:23:36
古往今来最难的学的武功(javascript)算其一。 欲练此功必先自宫,愿少侠习的此功,笑傲江湖。 你将了解 执行栈(Execution stack) 执行上下文(Execution Context) 作用域链(scope chains) 变量提升(hoisting) 闭包(closures) this 绑定 执行栈 又叫调用栈,具有 LIFO(last in first out 后进先出)结构,用于存储在代码执行期间创建的所有执行上下文。 当 JavaScript 引擎首次读取你的脚本时,它会创建一个全局执行上下文并将其推入当前的执行栈。每当发生一个函数调用,引擎都会为该函数创建一个新的执行上下文并将其推到当前执行栈的顶端。 引擎会运行执行上下文在执行栈顶端的函数,当此函数运行完成后,其对应的执行上下文将会从执行栈中弹出,上下文控制权将移到当前执行栈的下一个执行上下文。 我们通过下面的示例来说明一下 function one() { console.log('one') two() } function two() { console.log('two') } one() 当程序(代码)开始执行时 javscript 引擎创建 GobalExecutionContext (全局执行上下文)推入当前的执行栈,此时 GobalExecutionContext

闭包,递归

北城以北 提交于 2019-12-05 02:21:14
1. 不断调用自己本身(自己调用自己)——死循环 最大层次1000,实际测试997/998 2. 有明确的终止条件 满足以上两个才是 有效递归。 递:一直执行直到碰到结束条件 归:从结束条件开始往回退 最大递归深度998 • 1. 闭包是嵌套在函数中的函数。 • 2.闭包必须是内层函数对外层函数变量(非全局变量)的引用。 • 3. 外层函数返回内层函数名 •闭包的作用:保存局部信息不被销毁,保证数据的安全性。 •闭包的应用:装饰器 来源: https://www.cnblogs.com/zuohangyu123/p/11897383.html

前端面试题及答案(一)

五迷三道 提交于 2019-12-05 01:57:23
## 前端 **一.对闭包的理解,以及哪些地方用过闭包,以及闭包的缺点** ```javascript <button id="add">加1</button> <span id="span">10</span> (function(){ var a = 10; add.onclick = function (){ a++; span.innerHTML = a; } })() ``` **二.对跨域了解吗,jsonp 的限制** Q:为什么要跨域 A:跨域,通常情况下是说在两个不通过的域名下面无法进行正常的通信,或者说是无法获取其他域名下面的数据,这个主要的原因是,浏览器出于安全问题的考虑,采用了同源策略,通过浏览器对JS的限制,防止恶意用户获取非法的数据。 Q:同源策略 A:限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。 Q:“同源” A:协议相同、域名相同、端口相同 Q:同源政策的目的 A:是为了保证用户信息的安全,防止恶意的网站窃取数据。 Q:同源的限制范围 A:Cookie、LocalStorage 和 IndexDB 无法读取;DOM 无法获得;AJAX 请求不能发送 **解决办法** JSONP 1.只支持GET请求而不支持POST等其它类型的HTTP请求(虽然采用post

装饰器的理解、定义和使用

放肆的年华 提交于 2019-12-04 18:46:42
  装饰器实际上就是一个方法,但是他可以修饰其他的方法或者类,我们定义好一个方法或者类,在他之前使用装饰器可以实现我们想要的效果,比如我们有许多方法都要进行打印日志,虽然我们可以每一个方法里面都写上打印日志,但这样会显得很麻烦,我们只需要定义好一个打印日志的方法,然后用修饰符调用装饰我们需要打印日志的方法和类就能实现,我们先从 闭包 开始理解 闭包   什么是闭包,就是在方法里面写方法,然后内部方法可以调用外部方法的变量,我们先来看一个闭包的实现   def funA():     a = 1     def inner():       print(a) #闭包内部可以调用外面的参数     return inner   funa = funA()   print(funa,funa.__name__) #打印结果,我们会发现他是一个function(函数,或者可以叫做方法),他的名字叫inner,__name__是内置参数,我们可以直接使用,既然是一个方法,我们就可以调用   funa() #打印结果:1 我们通过变量名直接调用方法 装饰器的定义   学习python我们知道函数也是一个对象,如果是对象就能被调用,那么我们把方法当成参数放在另一个方法中进行调用,我们可以通过方法调用方法   def funA(f):     f()     print('AAA')   def

Python笔记4

主宰稳场 提交于 2019-12-04 17:37:30
JSON: JavaScript Object Notation, JavaScript 对象标记 JSON 本质:是一种轻量级的数据交换格式 1. 轻量级 是 和 XML作比较 2. 数据交换格式 :JSON 是一种数据交换格式, 它的载体是字符串(字符串是JSON的表现形式。) Ps. JSON 对象 和 JSON 字符串的区别 符合JSON格式的字符串叫做JSON字符串, i.e { "name":"John"} Ps. JSON VS XML , JSON 在互联网领域更受欢迎。 JSON优势:易于阅读、解析,网络传输效率高,是一种跨语言交换数据(XML也是跨语言的) 反序列化 json_str='{"name":"小气","age":18}' #JSON 字符串 json_array='[{"name":"小气","age":18},{"name":"小气","age":18}]'#JSON数组 里面 是双引号的话,外面必须是单引号 JSON格式的字符串键值必须是双引号 数字可以不加双引号 json字符串loads,转换成dict字典;jsonarray数组loads,转换成列表 JSON字符串到某种语言的解析过程叫反序列化 MongoDB是nosql数据库的代表,比较适合存储序列化后的数据 反序列化是将 JSON数据类型转化成python数据类型 关键在于

defer

穿精又带淫゛_ 提交于 2019-12-04 17:02:57
在Go语言的函数中 return 语句在底层并不是原子操作,它分为给返回值赋值和RET指令两步。而 defer 语句执行的时机就在返回值赋值操作后,RET指令执行前。具体如下图所示: 在defer函数定义时,对外部变量的引用是有两种方式的,分别是作为函数参数和作为闭包引用。作为函数参数,则在defer定义时就把值传递给defer,并被cache起来;作为闭包引用的话,则会在defer函数真正调用时根据整个上下文确定当前的值。 请看下面一个例子: func f5() (x int) { aa := func(){ fmt.Println(x, "b") } defer fmt.Println(x, "a") defer aa() defer fmt.Println(x,"c") return 5 } func main(){ fmt.Println(f5()) } 执行结果: 0 c 5 b 0 a 5 解释: fmt.Println(x, "a") 一个普普通通的函数调用,在底层究竟做了什么事情 不考虑本次的例子,假如代码如下: x:=4 fmt.Println(x, "a") 当程序执行到fmt.Println(x, "a"),首先在内存中开辟一个空间,可以叫做函数的运行空间,这个运行空间内存放局部变量,等一些东西。 注意,函数体内的x并不是外层的变量x