- 变量的作用域
作用域分为全局作用域和局部作用域
函数内部可以读取外部的全局变量
反之,函数外部不能读取函数内部变量
注意,在函数内部声明变量要使用var,不然会当作在函数内部声明了一个全局变量
一个简单的闭包
对于闭包的概念
- 闭包就是能够读取其他函数内部变量的函数
- 只有函数内部的子函数才能读取其局部变量,因此闭包是一个定义在函数内部的函数
- 闭包是函数内部和函数外部连接的桥梁
- 闭包的用途
除了上面例子的读取函数内部的变量外,它还可以让变量的值始终保存在内存中
f1是f2父元素,f2被复制给了全局变量result,这个时候f2就存在于内存中了,而f2依赖f1,所以f1也在内存中,不会在调用后被垃圾回收机制回收
使用闭包需要注意
- 闭包会使得函数中的变量都被保存在内存中,内存消耗变大,滥用闭包会造成页面性能问题,在ie中还会导致内存泄漏。解决方法是,在退出函数之前,将不使用局部变量全部删除。
- 闭包会在父元素外部改变父元素内部变量的值。如果把父元素当作对象使用,把闭包当作它的公有方法,把函数内部的变量当作私有属性,不要随便改变父元素内部变量的值。拿上面的栗子来说,f1内部变量num就是f1的私有变量,f2就是f1的公用方法
developer.mozilla
|
|
liaoxuefeng
|
|
不想直接返回结果的话,就返回方法,然后再调用
123456var sum = function() {return arr.reduce(function(x, y){return x+ y;})}return sum;立即执行函数
123(function(x) {return x*x;})(3);
计算器例子
在函数内返回方法
|
|
简单的小实例
|
|