JavaScript闭包在哪些复杂编程场景下被广泛应用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1163个文字,预计阅读时间需要5分钟。
json{ original: 一、闭包+由于在JavaScript语言中,只有函数内部的子函数才能读取局部变量,闭包就是能够读取其他函数内部变量的函数。, revised: 一、闭包+JavaScript中,只有函数内部的子函数可以访问局部变量,闭包能访问其他函数的内部变量。}
一、闭包
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,闭包就是能够读取其他函数内部变量的函数。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
比如下面的代码:
function f1() { var n = 999; function f2() { console.log(n); } return f2; } var result = f1(); result();//999
函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。
这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,就可以在f1外部读取它的内部变量了。
二、闭包的使用场景
1.setTimeout
原生的setTimeout传递的第一个函数不能带参数,通过闭包可以实现传参效果。
本文共计1163个文字,预计阅读时间需要5分钟。
json{ original: 一、闭包+由于在JavaScript语言中,只有函数内部的子函数才能读取局部变量,闭包就是能够读取其他函数内部变量的函数。, revised: 一、闭包+JavaScript中,只有函数内部的子函数可以访问局部变量,闭包能访问其他函数的内部变量。}
一、闭包
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,闭包就是能够读取其他函数内部变量的函数。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
比如下面的代码:
function f1() { var n = 999; function f2() { console.log(n); } return f2; } var result = f1(); result();//999
函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。
这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,就可以在f1外部读取它的内部变量了。
二、闭包的使用场景
1.setTimeout
原生的setTimeout传递的第一个函数不能带参数,通过闭包可以实现传参效果。

