闭包函数

浅谈js的内存与闭包

做~自己de王妃 提交于 2019-12-03 10:28:23
本文转载于: 猿2048 网站➤ https://www.mk2048.com/blog/blog.php?id=icjj10hjaa 本文来自于我的 github 0.前言 主要结合了内存的概念讲了js的一些的很简单、但是又不小心就犯错的地方。 结论:js执行顺序,先定义,后执行,从上到下,就近原则。闭包可以让外部访问某函数内部变量,而且会导致内存泄漏。 1.先说类型 在ECMAscript数据类型有基本类型和引用类型,基本类型有Undefined、Null、Boolean、Number、String,引用类型有Object,所有的的值将会是6种的其中之一(数据类型具有动态性,没有定义其他数据类型的必要了) 引用类型的值,也就是对象,一个对象是某个引用类型的一个实例,用new操作符创建也可以用字面量的方式(对象字面量创建var obj ={ })。ECMA里面有很多原生的引用类型,就是查文档的时候看见的那些:Function、Number (是对于原始类型Number的引用类型)、String(是对于原始类型String的引用类型)、Date、Array、Boolean(...)、Math、RegExp等等。 在程序运行的时候,整块内存可以划分为常量池(存放基本类型的值)、栈(存放变量)、很大的堆(存放对象)、运行时环境(函数运行时) 基本数据类型的值是直接在常量池里面可以拿到

自调用匿名函数(匿名闭包)解析与调用

匿名 (未验证) 提交于 2019-12-02 23:49:02
通俗的讲,()就是用来求值的,因此这个()任何时候都不能为空,因为它是要计算的。函数解析它只会解析到 {}为止,不会解析到 ()的。 把表达式放在()中会返回表达式的值; 把函数放在()中会返回函数本身;(function(){}()); 如果()紧跟在函数后面,就是表示在调用函数,即对函数求值:(function(){})();

php调用回调与闭包

匿名 (未验证) 提交于 2019-12-02 22:11:45
根据参数形式不同有两个函数 1、参数个数未知 call_user_func ( callable $callback [, mixed $parameter [, mixed $… ]] ) : mixed 示例:call_user_func(func, p1, p2, …); 2、参数为一个数组 call_user_func_array ( callable $callback , array $param_arr ) : mixed 示例:call_user_func_array(func, arr1); 来源:51CTO 作者: 半人猛犸 链接:https://blog.csdn.net/raoxiaoya/article/details/100586922

javascript闭包详解

谁说胖子不能爱 提交于 2019-12-02 13:00:23
全局作用域 所有浏览器都支持 window 对象,它表示浏览器窗口,JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。所以,全局变量是 window 对象的属性,全局函数是 window 对象的方法,甚至 HTML DOM 的 document 也是 window 对象的属性之一。 全局变量是JavaScript里生命周期(一个变量多长时间内保持一定的值)最长的变量,其将跨越整个程序,可以被程序中的任何函数方法访问。 在全局下声明的变量都会在window对象下,都在全局作用域中,我们可以通过window对象访问,也可以直接访问。 1 var name = "jeri"; 2 console.log(window.name); // 输出:jeri 3 console.log(name); // 输出:jeri 在JS中任何位置,没有使用var关键字声明的变量也都是全局变量。 1 function fun() { 2 name = "jeri"; 3 alert(name); 4 } 5 6 console.log(name); // 输出:jeri 全局变量存在于整个函数的生命周期中,然而其在全局范围内很容易被篡改,我们在使用全局变量时一定要小心,尽量不要使用全局变量。在函数内部声明变量没有使用var也会产生全局变量,会为我们造成一些混乱

Go语言基础之函数

。_饼干妹妹 提交于 2019-12-02 06:49:20
Go语言基础之函数 函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。 一 、函数 Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。 1.1 函数定义 Go语言中定义函数使用 func 关键字,具体格式如下: func 函数名(参数)(返回值){ 函数体 } 其中: 函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名(包的概念详见后文)。 参数:参数由参数变量和参数变量的类型组成,多个参数之间使用 , 分隔。 返回值:返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值必须用 () 包裹,并用 , 分隔。 函数体:实现指定功能的代码块。 我们先来定义一个求两个数之和的函数: func intSum(x int, y int) int { return x + y } 函数的参数和返回值都是可选的,例如我们可以实现一个既不需要参数也没有返回值的函数: func sayHello() { fmt.Println("Hello 沙河") } 1.2 函数的调用 定义了函数之后,我们可以通过 函数名() 的方式调用函数。 例如我们调用上面定义的两个函数,代码如下: func main() { sayHello() ret := intSum(10, 20)

作用域、闭包、原型

試著忘記壹切 提交于 2019-12-02 03:36:32
1.作用域 1) 全局作用域 2)函数作用域 3)块级作用域 // 最顶层作用域即为全局作用域 function test() { if (true) { var a = 1 let b = 2 } console.log('a: ', a); // 在函数里用var声明的变量都是局部变量 console.log('b: ', b); // 使用let声明的变量只在定义的代码块内有效 } test() 总结: 作用域就是js访问变量的机制 2.闭包 在函数外能够访问函数内的变量 1) var a = function outer() { var a = 2 return function () { a ++ return a } } var b = a() b() // 3 b() // 4 2)作用及缺点 作用: 实现私有变量,减少全局变量 缺点: 耗费内存,容易导致内存泄漏 3. 原型 每一个函数都有一个prototype对象属性,指向另一个对象 prototype(对象属性)的所有属性和方法,都会被构造函数的实例继承 prototype就是调用构造函数所创建的那个实例对象的原型(proto)。 function Animal(animal) { this.name = animal } Animal.prototype.getName = function() {

闭包

≡放荡痞女 提交于 2019-12-01 23:59:27
定义:多层函数嵌套(一般为两个),而且通常内部函数需要用到外部函数的变量,那么就把内部函数和外部函数中的那些变量值 叫做闭包。 定义有些抽象,来看例子。如果想实现设计一个一元一次函数,其中斜率k,截距b和变量x 都是需要用户自定义。 程序如上,当执行这个程序的时候,编译器首先会跳到 line_1 = line(1,2) 这行,随后程序会找到 def line(k,b)这行,再继续到def creat_y(x)这行, 此时,程序不会执行内层函数中的内容,因为函数只有在被调用的时候才会执行,所以程序执行到def creat_y(x)这行时什么也不会做,直接跳到return creat_y 【注意这里没有小括号】。 此时返回了函数的指向,而不会函数的值。也就是说程序从开始运行到现在返回的结果是 内层函数creat_y的指向。 而creat_y指向了计算机内存中的一块空间,这块空间中有实参k b和形参x 以及函数creat_y里面的内容【红框里面的东西】。 所以,当最开始执行line_ = line(1,2)这行时,结果就是line_1指向了红框这个空间,而这个空间中只有x一个形参,k和b都是作为实参从外部函数中被传入到内层函数中去了。 后面三行,在调用line_1时传入的参数(0,1,2)就是传给红框空间中的x。 来源: https://www.cnblogs.com/GouQ/p

装饰器和闭包理解(一)

天涯浪子 提交于 2019-12-01 19:20:45
''' @Descripttion: @version: @Author: 冯浩 @Date: 2019-10-21 15:19:54 @LastEditors: 冯浩 @LastEditTime: 2019-10-21 16:02:34 ''' #例子一 def deco1(func):# 装饰器 def inner(): print('装饰器内部函数') return inner #原始表达方式, 装饰器其实就是该方式的语法糖 def example0(): print('原始函数') print(id(example0)) example0 = deco1(example0) print(id(example0)) print('*'*32) example0() #执行替换后的本函数 #装饰器表达法,装饰器可以理解为函数调用的简化表达 @deco1 def example1(): print('原始函数') print('-'*32) example1() #执行装饰器表达后的本函数 ''' 63866536 60649120 ******************************** 装饰器内部函数 -------------------------------- 装饰器内部函数 ''' 补充:example1()表是调用函数的执行结果

美丽的闭包,在js中实现函数重载

自闭症网瘾萝莉.ら 提交于 2019-11-30 12:21:02
引言 最近在js的学习中,看到了函数重载的问题,一开始,只看到了实现代码,看着代码冥思苦想了半个小时,总算是理清了其实现的原理,也为其实现的巧妙感到赞叹,也是在自己搞懂原理之后,去网络上搜索了下,才知道,这个实现方法是jQuery作者John Resig在《JavaScript忍者秘籍》中对函数重载的实现,设计十分的巧妙,写下此文,给大家做一个分享 什么是函数的重载 重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。 先来看看效果 function addMethod (obj, name, fn) { var old = obj[name]; obj[name] = function () { if (fn.length === arguments.length) { return fn.apply(this, arguments) } else if (typeof old === 'function' ) { return old.apply(this, arguments) } } } var person = {userName: 'bear鲍的小小熊' } addMethod(person, 'show' , function () { console.log(this

前端面试题汇总大全(含答案)-- 持续更新

為{幸葍}努か 提交于 2019-11-30 10:26:05
目录 一、HTML 篇 1. 简述一下你对 HTML 语义化的理解? 2. 标签上 title 与 alt 属性的区别是什么? 3. iframe的优缺点? 4. href 与 src? 二、CSS 篇 1. 介绍一下 CSS 的盒子模型? 2. css 选择器优先级? 3. 垂直居中几种方式? 4. 简明说一下 CSS link 与 @import 的区别和用法? 5. rgba和opacity的透明效果有什么不同? 6. display:none和visibility:hidden的区别? 7. position的值, relative和absolute分别是相对于谁进行定位的? 三、HTML / CSS 混合篇 1. HTML5、CSS3 里面都新增了那些新特性? 2. BFC 是什么? 3. 常见兼容性问题? 四、JS 篇 1. JS 数据类型 ? 2. 判断一个值是什么类型有哪些方法? 3. null 和 undefined 的区别? 4. 怎么判断一个变量arr的话是否为数组(此题用 typeof 不行)? 5. “ ===”、“ ==”的区别? 6. “eval是做什么的? 7. 箭头函数有哪些特点? 8. var、let、const 区别? 9. new操作符具体干了什么呢? 10. JSON 的了解? 11. documen.write 和 innerHTML