sortBy和闭包
sortBy
函数接受一个名为property的参数并返回一个接受两个参数的新函数 ,本函数适于配合原生sort函数使用
函数定义为:
显然,sortBy函数接受一个属性并返回另一个函数.返回函数作为compareFunction传递给sort函数.此处的问题是,持有着peoperty参数的返回函数是怎么得来的?
闭包的世界欢迎你.
在winter大大,重学前端中,大大如此解释闭包:
闭包翻译自英文单词closure,在计算机领域,它有三个完全不相同的意义:
编译原理中,它是处理语法产生式的一个步骤;
计算几何中,它表示包裹平面点集的凸多边形(翻译为凸包);
在编程语言领域,它表示一种函数.
我们可以简单理解闭包为一个绑定了执行环境的函数,这个函数并不是印在书本里的一条简单的表达式,闭包与普通函数的区别是,它携带了执行环境,就像人在外星中需要自带吸氧的装备一样,这个函数也带有在程序中生存的环境.
在古典的闭包定义中,闭包包括两个部分:
环境部分
环境
标识符列表
表达式部分
对应于js,则是
环境部分
环境: 函数的词法环境(执行上下文的一部分)
标识符列表: 函数中用到的未声明的变量
表达式部分: 函数体
至此,我们可以认为,JS中的函数完全符合闭包的定义.它的环境部分是函数词法环境部分组成,它的标识符是函数中用到的未声明变量,它的表达式部分就是函数体.
回到我们的高阶函数来, 闭包有3个可访问的作用域:
在它自身声明之内声明的变量
对全局变量的访问
对外部函数变量的访问(也即上述函数用到的)
上面说的第三个作用域体现了闭包的一个重要概念,闭包可以记住它的上下文!
下面继续我们的高阶函数吧.
Last updated
Was this helpful?