闭包

腾讯前端一面总结

天大地大妈咪最大 提交于 2020-02-06 17:03:49
看到一片特别好的文章 原文作者:广工小成 https://segmentfault.com/a/1190000013654696 前言 腾讯一面,相比阿里一面来说,腾讯一面先给打电话预定时间,这也给了我们这些面试者去准备的时间。但是也正是因为这种确定性,也有在等待电话的时候的心情的忐忑。 背景 我是一名大三学生,大一在学校acm集训队,后来转向学习java,又去开发Android,在期间,学会怎么去解决一些编程遇到的问题以及灵活运用github。在大二寒假的时候,开始接触学习前端,如今已经一年了,一开始是做百度前端技术学院( http://ife.baidu.com/2016/task/all)的任务,学习了html和css,以及参考别人优秀的代码。 js是通过红宝石,js高级教程第三版开始入门学习的,这本书里面的基础知识很精髓,那时候我也很有耐心的去看完了,虽然说可能实践还是跟不上理论,因为后面做的项目基本都是用框架去做项目,而导致对于基础知识的实践比较少。 接下来,我们进入正题吧。 腾讯一面 首先,接到电话的时候,由于之前心情的忐忑,情绪还是有点兴奋的,以期待的口气向面试官问好,面试官也问问好之后就开始进入面试题了。 【你先简短的介绍一下自己】 在这里,我就简短的介绍了自己的学校专业,应聘的岗位,以及是怎么走向学习前端的道路,也就和我写的背景差不多。 【你是怎么学习前端的?】

Python 语法之闭包

六眼飞鱼酱① 提交于 2020-02-06 12:01:04
闭包的概念 在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。 函数名称的引用传递 def func(): print("--- func is run ----") func() ret = func print(id(ret)) print(id(func)) ret() 运行结果: --- func is run ---- 56145576 56145576 --- func is run ---- 由上图可知,和变量名一样的,函数名只是函数代码空间的引用,当函数名赋值给一个对象的时候就是引用传递。 局部-全局变量 定义在方法内的变量是局部变量,不能在方法外做引用;定义在模块最外层的变量是全局变量,它是全局范围内可见的。 那么问题来了,当方法内部有嵌套方法时,嵌套方法能否使用父方法中定义的局部变量呢?答案是可以。 def outer_func(): data = 520

[前端JS学习笔记]JavaScript function

浪子不回头ぞ 提交于 2020-02-05 13:04:39
一、函数的声明 1.1 function 命令 function methodName(params) { // code } 如下声明: function test_function(params) { console.log("function"); } 如上函数, 声明了 test_function函数, 以后使用test_function(params) 都会调用相应的代码, 这就是函数的声明 1.2 函数表达式 除了1.1的函数直接声明,JS还可以用函数赋值给一个变量,即函数表达式。 我们先来看下它的语法是怎么玩的。 var methodName = function() { // code }; 如下玩法 var test_function = function() { console.log("function"); }; 如上函数是把一个匿名函数赋值给一个变量, 匿名函数就是没有名字了,顾名思义,所以function命令后不要再加函数名。特别要提醒一点 : 使用函数表达式声明的, 函数的声明在结尾的大括号需要加上 分号 表示语句结束。 而函数声明的结尾的大括号后面可以不加 分号。 1.3 Function构造函数 先看下语法 var methodName = new Function( params... ); 玩法 如果有多个参数,最后一个参数会被当做函数体使用

什么是JavaScript闭包

不羁的心 提交于 2020-02-05 09:39:47
JS闭包 MDN对闭包的定义是:函数与对其状态即词法环境(lexical environment)的引用共同构成闭包(closure)。也就是说, 闭包可以让你从内部函数访问外部函数作用域 。在JavaScript,函数在每次创建时生成闭包。 通俗来讲 一个函数访问另外一个函数局部作用域内的变量 就产生了闭包 作用: 延申变量的作用范围 ,使局部变量常驻在内存中不被销毁 缺点: 变量不被销毁,发生内存泄漏 我们先通过一个错误的例子了解局部作用域和垃圾回收机制 function func() { var num = 10; console.log(num); } func();//输出10 console.log(num);//报错 num is not defined 结论:在一个函数的外部无法访问函数内部作用域定义的变量 即函数的局部作用域。而在函数内部,func函数后 1.定义变量 2.被console.log 输出 3.被调用之后 退出函数 变量i失去引用 转而被当垃圾回收。 在javascript中,如果一个对象不再被引用,那么这个对象就会被垃圾回收机制回收; 再来看一个简单的闭包案例 // 一个函数访问另外一个函数局部作用域内的变量 就产生了闭包 function fn() { var str = "这是一段字符!"; return function () {

Go 函数与闭包

穿精又带淫゛_ 提交于 2020-02-04 12:43:44
函数 1.函数与闭包 func adder() func (value int){ sum := 0 return func(value int) int{ sum += value return sum } } func main() { adder := adder() for i := 0; i < 10; i++ { fmt.Println(adder(i)) } } 函数式编程 VS 函数指针 函数是一等公民:参数,变量,返回值都可以是函数 高阶函数 函数 -> 闭包 2.“正统”函数式编程 不可变性:不能有状态,只有常量和函数 函数只能有一个参数 type iAdder func(int) (int, iAdder) func adder(base int) iAdder { return func(value int) (int, iAdder){ return base+value, adder(base+value) } } func main(){ a := adder(0) for i := 0; i < 10; i++ { fmt.Println(a(i)) } } 3.其他语言的闭包 python的闭包 def adder(): sum = 0 def f(value): nonlocal sum sum += value return sum

在随机点中找到最大凸包多边形并求得面积

♀尐吖头ヾ 提交于 2020-02-04 10:02:20
记录美赛选拔时的编程测试题 但是当时老师要求的是不能调用现成函数只能用自己编程实现 1.关于rand函数的使用 rand函数产生在0到1之间的随机数 rand(n,m);产生一个N*m的矩阵,其中的数字都是在0到1之间的随机数 2.关于DelaunayTri函数: 实现三角拆分 3.convexHull函数,找到凸包; 问题:求平面上n个点的凸多边形闭包及该多边形面积 要求:在平面上随机产生100个点,然后作出闭包曲线(如图1),并输出该凸多边形面积。 特别提醒:必须自己设计算法实现求闭包,不能直接调用现成函数: >> x = rand ( 100,1 ) ; >> y = rand ( 100,1 ) ; >> dt = DelaunayTri ( x,y ) ; >> k = convexHull ( dt ) ; >> plot ( x,y, '.' , 'markersize' ,10 ) ; >> hold on ; >> plot ( x ( k ) ,y ( k ) , 'r' ) ; 来源: CSDN 作者: 吃bug的阿媛 链接: https://blog.csdn.net/qq_44169314/article/details/104110370

groovy中的闭包

妖精的绣舞 提交于 2020-02-03 22:46:51
groovy中的闭包 闭包是非常重要的,在groovy中,闭包是最有用的特性之一 闭包就是一个代码块,一个闭包相当于是一个定义好的方法 简单的例子 迭代 闭包如果只有一个参数的话,我们可以使用隐藏参数it来表示,省略了-> Closure c = { println "$it" } [ 1 , 2 , 3 ] . each ( c ) 处理资源 file的eachLine方法负责处理文件输入流的打开和关闭,这样避免你偶然的错误处理形成资源泄漏。 new File ( 'myfile.txt' ) . eachLine { println it } 声明闭包 我们可以在调用的时候传入闭包 . eachLine { println it } 可以提前声明好闭包,在调用的时候传入 Closure c = { println "$it" } 引用一个方法作为闭包,这个引用的闭包甚至可以重载 使用.&即可把一个实例的方法声明成一个闭包 class MethodClosure { int compare ( int x , int y ) { return x <= > y } int compare ( List list ) { return list . size ( ) } } def m = new MethodClosure ( ) def c1 = m . & compare

javascript 高级 笔记整理

蓝咒 提交于 2020-02-03 22:44:11
目标 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript 中使用正则表达式 JavaScript 的组成 ECMAScript - 语法规范 变量、数据类型、类型转换、操作符 流程控制语句:判断、循环语句 数组、函数、作用域、预解析 对象、属性、方法、简单类型和复杂类型的区别 内置对象:Math、Date、Array,基本包装类型String、Number、Boolean Web APIs BOM onload页面加载事件,window顶级对象 定时器 location、history DOM 获取页面元素,注册事件 属性操作,样式操作 节点属性,节点层级 动态创建元素 事件:注册事件的方式、事件的三个阶段、事件对象 面向对象与面向过程: 面向过程就是亲力亲为,事无巨细,面面俱到,步步紧跟,有条不紊 面向对象就是找一个对象,指挥得结果 面向对象将执行者转变成指挥者 面向对象不是面向过程的替代,而是面向过程的封装 面向对象的特性: 封装性 继承性 [多态性]抽象 prototype对象 JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。 这个对象的所有属性和方法,都会被构造函数的所拥有。 这也就意味着,我们可以把 所有对象实例需要共享的属性和方法直接定义在 prototype 对象上 。

闭包的定义与使用

久未见 提交于 2020-02-03 13:41:13
闭包的定义 闭包应该定义在 main 里面还是定义tabBar 里面? 定义在 main 里面 点击tabBar 里面的按钮,让这个闭包回调到 main 里面, 让 main里面 viewController 去做事情 //这里是没有循环引用的 类 delegate 的弱引用, 所以 定义闭包对象 用到 self 不需要使用避免循环引用 闭包的执行 闭包定义在 main 里面, 让这个闭包传到 tabBar 里面才能执行 在tabBar 里面定义一个参数/属性/对象(类 delegate 对象)去接受传入进来的闭包 流程 闭包属性/对象 执行(按钮的点击事件) 定在是在 main 的 viewController 里面 hmTabBar.composeButtonClick = {print("我是闭包回调过来的")} //闭包的接受/定义 这里是有循环引用的 [unowned self] 来源: https://www.cnblogs.com/alineware/p/12255211.html

作用域和闭包

假装没事ソ 提交于 2020-02-02 10:45:17
知识点 执行上下文 this 作用域 作用域链 闭包 执行上下文 范围:一段 <script> 或者一个函数 全局:变量定义、函数声明 函数:变量定义、函数声明、this、arguments 12345678910111213141516171819202122 //全局中或某个函数体中,程序会把变量声明提前,并且用undefined占位(即赋值)//也会把函数声明提前console.log(a);//undefinedvar a = 100; fn('kk');//kk 20function fn(name) { age = 20; console.log(name, age); var age;}//详细运行过程如下// var a;// //函数fn也被提前;// console.log(a);//因为只是声明提前,赋值没有提前,所有undedined// a = 100;// fn('kk');///////////// function fn(name) {// var age;//同理,声明被提前 name也被赋值// console.log(name, age)// } 123456789 fn1();//正常执行function () {}//这里fn2声明被提前,还没有赋值,所有报错:undefinedfn2();var fn2 = function() {}