闭包

闭包的循环引用 与 解决(三种方法)

帅比萌擦擦* 提交于 2019-12-19 00:51:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 闭包的循环引用 与 解决(三种方法) //****************************************************** //****************************************************** //****************************************************** 闭包的循环引用 import UIKit class ViewController: UIViewController { // 定义完成回调属性 // 闭包的返回值可选 // var finishedCallBack: ()->()? // 闭包属性可选 var finishedCallBack: ((html: String )->())? override func viewDidLoad() { super . viewDidLoad () loadData { (html) -> () in print (html) print ( self . view ) } } deinit { print ( " 控制器 88" ) } // 闭包应用场景:异步操作完成后,通过闭包的参数传递网络请求结果 func loadData

闭包的循环引用 与 解决(三种方法)

Deadly 提交于 2019-12-19 00:47:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 闭包的循环引用 与 解决(三种方法) //****************************************************** //****************************************************** //****************************************************** 闭包的循环引用 import UIKit class ViewController: UIViewController { // 定义完成回调属性 // 闭包的返回值可选 // var finishedCallBack: ()->()? // 闭包属性可选 var finishedCallBack: ((html: String )->())? override func viewDidLoad() { super . viewDidLoad () loadData { (html) -> () in print (html) print ( self . view ) } } deinit { print ( " 控制器 88" ) } // 闭包应用场景:异步操作完成后,通过闭包的参数传递网络请求结果 func loadData

人生第一次面试---百度前端面试

ε祈祈猫儿з 提交于 2019-12-18 20:48:40
  在这里记录一下自己人生中的第一次面试,因为之前春招有其他的安排,没有去实习的打算,错过了腾讯和阿里的面试,觉得也挺可惜的,能不能过是一回事,去锻炼自己又是一回事。   在自己被通知简历通过筛选以后,心里其实还是非常高兴的,然后被通知了面试,开始了一个星期的CSS和JS基础复习之路,学习了css3的新特性和许多HTML5的新技术。 第一面   第一面是一个美女,开始的时候直接叫我做个自我介绍,没错,第一个问题就把我问蒙了,经验不足的后果啊,也没准备过自我介绍说些什么,然后说了一些自己的基本情况,结果面试官问了句:“没有了?”,表示很惊讶,然后开始问问题了。。   question 1:img标签中的title和alt的区别?   answer:title是鼠标放上去的时候显示,alt呢是图片无法显示的时候显示在浏览器。   question 2:css的选择器有哪些?优先级?   answer:派生选择器,ID选择器,类选择器。选择越精准优先级越高。   question 3:position有哪些?   answer:绝对定位absolute,相对定义relative,静态static,固定fixed;   question 4:absolute和relative是相对于什么来定位?   answer:absolute是相对于body来定位,relative是相对于父级来定位。

什么是闭包,我的理解

半城伤御伤魂 提交于 2019-12-18 20:06:03
首先,我觉得,一个概念,如果不理解也不影响使用的话,那么,就没必要去理解它、去学习它。闭包就是这样一个概念,你不理解它也能很好的用它。俺这两年写as3程序,是天天在和它打交道,甚至有过一个function套一个,一个方法中套了20多个function的极端例子,但从未深究过它是怎么实现的,它就像水和空气一样,我们不需要知道水是H2O,空气是氧气氮气二氧化碳等的混合物,也活的好好的。 其次,我觉得,网上对闭包概念的解释都太狭隘了,看得人蛋疼,就像回到了i++,++i时代一样。如果非要去理解这个概念,像那样去理解,则收获太小,不值得。 维基百科上对闭包的解释就很经典: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。 Peter J. Landin 在1964年将术语闭包定义为 一种包含环境成分和控制成分的实体 。 下面是我理解的闭包概念。 先看看数学上的闭包。 (1,5) 是一个区间,但对这个区间做分析、计算什么的,经常会用到1和5这两个不属于这个区间的值,[1,5]就是(1,5)的闭包。 在生活上,我们办事情,找A部门,A部门说,你先得找B部门盖个章,B部门说

以setTimeout来聊聊Event Loop

夙愿已清 提交于 2019-12-18 15:16:16
终于到了神话破灭的时刻…… 这注定是一篇“自取其辱”的博客,飞哥,你们眼中的大神,Duang,这次脸朝下摔地上了。 故事得从这个求助开始: e.returnValue 报错:未定义 ,“一起帮”现在人气还不够旺,碰到了我勉勉强强能够解决的问题,硬着头皮也得上啊!远程一看,问题不是e.returnValue没值,是e本身就没值。而更核心的问题是:这段代码,是被放在setTimeout()里面的。 (这里插一句:很多问题,就得远程,求助人贴出来的代码,根本就没抓住重点。话说,很多时候,要是能抓住问题的核心,问题也已经解决了一大半了。) 把代码简单化一下,代码大致应该是这样的: 1 <script> 2 function showEvent(){ 3 setTimeout( 4 function(){ 5 alert('in setTimeout:'+ event); 6 },100 7 ); 8 } 9 </script> 10 11 <input type="submit" name="Submit" value="提交" onclick="showEvent()" /> 点击提交按钮,就会看到:event 为 undefined。 凭着直觉,真的就是坑踩得太多的直觉,我飞快的解决了这个问题:在setTimeout()之前加一行代码,如下所示: 1 function

Javascript 闭包与高阶函数 ( 一 )

只愿长相守 提交于 2019-12-18 07:01:26
上个月,淡丶无欲 让我写一期关于 闭包 的随笔,其实惭愧,我对闭包也是略知一二 ,不能给出一个很好的解释,担心自己讲不出个所以然来。 所以带着学习的目的来写一写,如有错误,忘不吝赐教 。 为什么要有闭包? 初识闭包时,,我一直在想,为什么只有JS有闭包,c#,c++ 为什么没有 ?? 1. 封装局部变量 看下面一个例子,计算 斐波那契 数。 为了能够重用数据,一个通用做法就是将计算过的数据缓存起来,但缓存的数据对外是不可见的 。 看下面的 c# 代码 : public static class Fibonacci{ public static Fibonacci(){ cache[0] = 1; cache[1] = 1; } private static IList<int> cache = new List<int>(1000,-1); public static int Calc(n){ if(cache[n] != -1){ return cache[n]; }else{ return cache[n] = Calc(n-1) + Calc(n-2); } } } 快两年没写c#了, 很撇脚,囧 ,但是在这类静态语言,这种方法很合适 。 看JS 怎么写 var cache = [1, 1]; var calc = function(){ return cache[n] !=

函数进阶——闭包,装饰器,生成器,迭代器

[亡魂溺海] 提交于 2019-12-18 05:40:59
闭包 函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问他们所在的外部函数中声明的所有局部变量、参数。当其中一个这样的内部函数在包含他们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。 装饰器 在不修改原函数的情况下,给原函数增加新的功能,使得程序变得可扩展 http://www.cnblogs.com/alex3714/articles/5765046.html(转) 列表生成式 1 a = [i+1 for i in range(10)] 2 print(a)#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] View Code 生成器(generator) 按照一定的算法,在循环的过程中不断推算出后续的元素,可以避免创建完整的list,从而节省大量的空间 创建方式 (1)方式一:把列表生成式中的[]换成()通过next()函数获得generator的下一个返回值,直到计算到最后一个元素,没有更多的元素时,抛出StopInteration的错误 1 a = (i+1 for i in range(10)) 2 print(a)#

如何用函数表示数(四)数的彻底消失

时光怂恿深爱的人放手 提交于 2019-12-17 21:35:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 之前的只是开胃小菜,在确保你能弄懂前面的代码例子后再来看这个。这个能弄懂表示你已经彻底搞懂了闭包是怎么回事了。 前面的例子中,我们最终还是需要一个数来表示一个起始的数。那么还没有完全达到我们的目的。但是如果要完全用函数来代替数,我们又怎么证明一个函数确实是表示那个数呢? 为此,我们需要先考察一下数到底是怎么回事。 想想最原始的表示数的方法:用指头数数,当10个指头数完了,数就到头了,如果你是一个牧羊人,有超过十头的羊,还可以用来表示比10更大的数。但是当人类想明白5个指头和5头羊之间的联系是什么的时候,他们就不用再用5头羊或5个指头来表示5,而只要说出数字5的符号就可以了,这时人类完成了一次抽象概念提取的过程。 因此,最原始的数的概念:一个数就是表示一件事物重复的次数。 想象一个在完全只有函数,而没有数的世界里,怎么计数?方法就是, 对这个函数传入一个函数执行(注意,没有数了),这个函数的内容被执行N遍,就表示执行这个函数的函数代表的是N这个数了。 因此,假设有一个函数能代表0 zero = f(x) 还有一个函数能代表加1 incr = f(x) 那么1就能表示为 one = incr(zero) 2表示为 two = incr(incr(zero)) 更多的数表示为 three = incr( incr

python闭包与装饰器

☆樱花仙子☆ 提交于 2019-12-17 18:04:58
""" 1.创建一个闭包(终级版) 2.@xx装饰你要装饰的函数 #万能装饰器 def set_fun(func): def call_fun(*args,**kwargs): return func(*args,**kwargs) return call_fun @set_fun def test(): pass #装饰器在不改变原先的函数代码的情况下,给原先的函数添加额外的功能(原则) #装饰器不会去改变原函数的参数及结果 #装饰前的函数(test),是由func指向的 #装饰后的函数(test),是指向了call_fun 闭包 1. 两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定有参数 2. 外部参数可以在内存中存留,跟函数的区别 def 外部函数(data): def 内部函数(): pass return 内部函数 """ #装饰器是什么:@闭包的外部函数引用 #装饰器作用:装饰我们的函数,给函数添加额外的功能,不改变装饰前的函数代码 #代码怎么写, #1.先写闭包 #2.在要装饰的函数上写闭外外层的引用 def set_fun(func): def call_fun(): print("权限认证") #func() return call_fun @set_fun def test(): print("test") test() # 万能装饰器 def set

如何提升Web前端性能?

一世执手 提交于 2019-12-17 14:20:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 什么是WEB前端呢?就是用户电脑的浏览器所做的一切事情。我们来看看用户访问网站,浏览器都做了哪些事情:输入网址 –> 解析域名 -> 请求页面 -> 解析页面并发送页面中的资源请求 -> 渲染资源 -> 输出页面 -> 监听用户操作 -> 重新渲染。 通过上面的路径可以看出浏览器分为请求、传输、渲染三部分来实现用户的访问,本文就从这三个部分来浅析如何提升WEB前端性能。 请求 浏览器为了减少请求传输,实现了自己的缓存机制。浏览器缓存就是把一个已经请求过的Web资源拷贝一份副本存储在浏览器中,当再次请求相同的URL时,先去查看缓存,如果有本地缓存,浏览器缓存机制会根据验证机制(Etag)和过期机制(Last-Modified)进行判断是使用缓存,还是从服务器传输资源文件。具体流程如下图所示: 如何从请求、传输、渲染3个方面提升Web前端性能 浏览器的请求有些是并发的,有些是阻塞的,比如:图片、CSS、接口的请求是并发;JS文件是阻塞的。请求JS的时候,浏览器会中断渲染进程,等待JS文件加载解析完毕,再重新渲染。所以要把JS文件放在页面的最后。 JS也可以通过两种方式由阻塞改成并行:一种是通过创建script标签,插入DOM中;另一种是在Script标签中增加async属性。 每种浏览器对同一域名并发的数量有限制