JavaScript中闭包的概念及用法
来源:互联网 发布:手机写作软件排行 编辑:程序博客网 时间:2024/06/05 05:51
昨天在<JavaScript高级程序编程>中看到了函数一章, 讲到了关于闭包的概念, 其实闭包说的简单一点就是在一个函数的里面返回另一个函数, 因此返回的函数可以访问外层函数的变量和方法. 这是一种极为有用的技术, 例如有一个对象数组, 我们想要根据某个对象属性对数组进行排序, 而传递给数组sort()方法的比较函数只能接受两个参数, 也就是要比较的值, 可是我们需要一种方式来指明按照哪个属性来排序. 要解决这个问题, 可以定义一个函数, 他接收一个属性名, 然后根据这个属性名来创建一个比较函数, 下面就是这个函数的定义:
- function createComparisonFunction( propertyName ){
- return function( obj1, obj2 ){
- var value1 = obj1[ propertyName ];
- var value2 = obj2[ propertyName ];
- if( value1 < value2 ){
- return -1;
- }
- else if( value1 > value2 ){
- return 1;
- }
- else {
- return 0;
- }
- }
实际上这就是在一个函数中嵌套了另一个函数, 而且内部函数前面加了一个return操作符. 在内部函数接收到propertyName参数后, 它会使用方括号表示法来取得给定属性的值, 取得了想要的属性值之后, 定义比较函数就非常简单了. 上面的函数可以像下面例子中这样使用:
- var data = [{ name:"Zachary", age: 28 }, { name: "Nicholas", age: 29}];
- data.sort( createComparisonFunction("name") );
- alert( data[0].name ); //结果是Nicholas
- data.sort( createComparisonFunction("age") );
- alert( data[0].name ); //结果是Zac;hary
在默认情况下我们会直接使用sort()方法来调用每个对象的toString()方法来排序, 但得到的结果往往是不符合我们的思维习惯. 因此, 我们调用createComparisonFunction("name")方法创建了一个比较函数, 以便按照每个对象的name属性进行排序, 所以结果排在前面的是name为"Nicholas", age为29的对象. 而后面使用createComparisonFunction("age")返回的比较函数则是按照对象的age属性排序, 所以结果排在前面的是name值为"Zachary",age值为28的对象.
0 0
- JavaScript中闭包的概念及用法
- javascript中闭包的概念
- block的概念及简单用法,通俗易懂
- angularJS-----路由的概念及用法
- JavaScript 原型的概念及使用
- JSP概念及用法
- mapReduce概念及用法
- java中Filter及FilterChain的相关概念及用法
- javascript 日期及onload的用法
- javascript 日期及onload的用法
- JavaScript:exec()方法的用法及说明
- Javascript中arguments的用法及实例
- javascript事件监听器的用法及注意事项
- Angular.js概念及用法
- C++引用&概念及用法
- linux cgroups概念及用法
- Oracle回滚段概念用法规划及问题的解决
- Apache Pig的一些基础概念及用法总结(转)
- Python零基础入门之三十Text控件
- 基本引用类型和对象引用类型的区别
- ACM 删数问题 SDUT 2072
- Elasticsearch上手——结合Kibana的安装配置
- Markdown 语法介绍
- JavaScript中闭包的概念及用法
- VS2013配置GSL运算库
- 冒泡排序和插入排序的区别
- servlet和jsp交互的第一个典型例子
- 5. 标题:有理数类
- hibernate常见异常
- 自动饮料售货机
- 第四十讲项目七-找数字
- 1.26.7