定义 闭包是函数和声明该函数的词法环境的组合。闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。 范例 javascript的垃圾回收原理 1. 在javascript中,如果一个对象不再被引用,那么这个对象就 ...
分类:
编程语言 时间:
2018-03-08 02:57:17
阅读次数:
354
变量声明时如果不使用 var 关键字,那么它就是一个全局变量,即便它在函数内定义。 闭包是可访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。 数组 <script> var a=["a","b","c","d"]; function array(){ a.pop(); 删除数组的最后一个元 ...
分类:
编程语言 时间:
2018-03-02 14:57:37
阅读次数:
171
1、let的作用域与const相同,支持块级作用域,并且只在声明所在的块级作用域内有效 2、二者都不存在变量提升,并且存在暂时性死区,只能在声明的位置后面使用 3、在一个作用域内,都不可重复声明,不然会报错 在es5中,只有全局作用域和函数作用域,没有块级作用域,而es6中的let为javasrci ...
分类:
其他好文 时间:
2018-03-01 13:25:17
阅读次数:
122
一、变量提升 ES5中没有块作用域,只有全局作用域、函数作用域。 之所以出现这种情况,是因为变量提升导致的;上述过程相当于: 二、函数提升 创建函数有两种方式:函数声明、函数表达式;只有在“函数声明”方式中,函数才会提升。 函数提升:执行函数代码时,先执行函数声明; ...
分类:
其他好文 时间:
2018-02-27 21:31:54
阅读次数:
205
函数闭包 什么是闭包? 内部函数对外部函数作用域里对象的引用(非全局变量),则称内部函数为闭包 一个闭包就是你调用了外部函数,外部函数返回内部函数,此时的内部函数就叫做闭包函数 闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例 闭包简单示例: 通过这个例子大家可以看到,在 ...
分类:
其他好文 时间:
2018-02-26 13:31:32
阅读次数:
196
1、let/ const声明变量(项目中常用) 之前使用var关键字声明变量,无论声明在何处,都会被视为声明在它的作用域的最顶部(不在大括号内{}即在全局作用域的最顶部),而在es6之前JavaScript只有函数作用域和全局作用域。这就是变量提升。 上面的代码实际上是: (1)let声明变量 le ...
分类:
其他好文 时间:
2018-02-24 19:26:33
阅读次数:
156
众所周知,在ES6之前,JavaScript是没有块级作用域的,如下图所示: 学过其他语言的同学肯定有点诧异,为什么会这样呢?因为js还是不同于其他语言的,在ES5中,只有全局作用域和函数作用域,并没有块作用域,当然我们可以实现块作用域的功能。看下面代码: 在这段段代码中,我们使用立即执行函数(II ...
分类:
Web程序 时间:
2018-02-23 13:23:50
阅读次数:
216
模块模式: 在立即执行函数表达式中定义的变量和方法在外界是访问不到的,只能通过其向外部提供的接口,"有限制"地访问.通过函数作用域解决了属性和方法的封装问题. var Person = (function(){ var name = "xin"; var age = 22; function get ...
分类:
其他好文 时间:
2018-02-22 19:42:26
阅读次数:
198
前文已经简单的介绍了函数的闭包。函数的闭包就是有权访问另一个函数作用域的函数,也就是函数内部又定义了一个函数。 上面的代码定义了一个函数Super,同时在Super函数内部又定义了一个匿名函数作为返回值。第七行调用Super函数,此时result是一个函数。第8行执行了result函数,输出为3。这 ...
分类:
编程语言 时间:
2018-02-09 17:22:18
阅读次数:
163
一、关于变量 ES5 1.只有全局作用域变量和函数作用域变量 2.“变量提升”(当程序进入一个新的函数时,会将该函数中所有的变量的声明放在函数开始的位置。仅仅会提升变量的声明,不会提升变量的赋值) ES6新增:块级作用域变量 1、let定义块级作用域变量 1、没有变量的提升,必须先声明后使用 2、l ...
分类:
其他好文 时间:
2018-02-08 00:20:59
阅读次数:
188