JavaScript系列:高级函数篇
前言:
本篇主要是介绍 JavaScript使用函数的高级方法,函数是JavaSCript中最有趣的部分,利用Function特性可以编写出很多非常有意思的代码,本篇主要包括:函数回调,高阶函数以及函数柯里化。
setTimeout(function(){
console.log("hello");
},2000)
// ... 大概2s之后(实际上大于2s)
// => hello
Node中一个非阻塞代码实例
创建一个文件 input.txt ,内容如下:
“Hello World”
创建 main.js 文件, 代码如下:
var fs = require("fs");
// 封装一个readFile函数
var readFile=function(filename,callback){
fs.readFile('input.txt', function (err, data) {
if (err) return callback(err);
return callback(null,data);
});
}
//调用
readFile('input.txt',function(err,data){
if(err)
handle(err);
else
handle(data);
}
JQuery的XMLHttpRequest也是利用回调执行异步编程
$.get( "example.php", function() {
alert( "success" );
})
.done(function() {
alert( "second success" );
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "finished" );
});
- 以其他函数为参数的函数
- 返回其他函数的函数
- 以其他函数为参数的函数
- 建立一个 model/User.js 主要负责和数据库进行数据的增删查改
var mysql = require('mysql');
var pool = mysql.createPool({
// 登录数据库的配置
});
function addUser(param,callback) {
pool.getConnection(function(err, connection) {
if(err) return callback(err);
var $sql="INSERT INTO user(id, password) VALUES(?,?)";
connection.query( $sql, [param.id, param.password],function(err, result) {
if(err)
return callback(err);
else
connection.release();
return callback(null,result);
});
});
}
- 通过传入添加数据和一个回调函数作为参数,我们在视图层可以自定义对添加失败和成功的操作,而无需理会和数据库的具体操作,当数据库发生变化的时候,只需要修改model的User.js,实现外模式和模式的逻辑独立性
2. 返回其他函数的函数
function makeAdder(addVal){
return function(arg){
return addVal+arg;
}
}
var add2=makeAdder(2);
var a=add2(10)
console.log(a);
// => 12
function curry(fn){
var args=[].slice.call(arguments,1);
return function(){
var innerArgs=[].slice.call(arguments);
var finalArgs=args.concat(innerArgs);
return fn.apply(null,finalArgs);
}
}
function add(){
var args=Array.prototype.slice.call(arguments);
return args.reduce(function(prev,next){
return prev+next;
});
}
var curryAdd=curry(add);
var result=curryAdd(1,2,3);
console.log(result);
// => 6
var curryAdd2=curry(add,2);
var result=curryAdd2(2,3);
console.log(result);
// => 7
两种方式都可以,第二个函数可以代表一个 加2函数
JavaScript系列:高级函数篇的更多相关文章
- 深入理解JavaScript系列(结局篇)
介绍 最近几个月忙得实在是不可开交,终于把<深入理解JavaScript系列>的最后两篇“补全”了,所谓的全是不准确的,因为很多内容都没有写呢,比如高性能.Ajax安全.DOM详解.Jav ...
- 30s源码刨析系列之函数篇
前言 由浅入深.逐个击破 30SecondsOfCode 中函数系列所有源码片段,带你领略源码之美. 本系列是对名库 30SecondsOfCode 的深入刨析. 本篇是其中的函数篇,可以在极短的时间 ...
- javascript系列-class4.函数
欢迎加入前端交流群来py: 转载请标明出处! 在火影的世界中存在忍术,忍术是把强大的能量集中在一起以各种各样不同的形式发射出来.怎样使用各种各样的忍术那?通过结印. ...
- JavaScript系列:函数 自执行 表达式 声明 定义
可用方式 (function($) {})(jQuery); !function( $ ){}(jQuery); +function( $ ){}(jQuery); -function( $ ){}( ...
- javascript之高级函数应用思想
1.级联函数:应用对象方法调用的连写 function A(){ this.a = ''; this.b = ''; this.c = ''; } //改造一下 A.prototype = { A.p ...
- javaScript的高级函数
1.map() map()方法返回一个新数组,新数组是原始数组调用函数之后处理后的值. map()方法按照原始数组元素顺序依次处理元素. map不会对空数组进行检测. map不会改变原始数组 . 参数 ...
- Oracle高级函数篇之递归查询start with connect by prior简单用法
路飞:" 把原来CSDN的博客转移到博客园咯!" 前段时间,自己负责的任务中刚好涉及到了组织关系的业务需求,自己用了oracle递归查询.下面简单来举个例子.在工作中我们经常会遇到 ...
- 深入理解JavaScript系列
转自http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 深入理解JavaScript系列(1):编写高质量JavaScript代码 ...
- 深入理解JavaScript系列(转自汤姆大叔)
深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaScript系列(1):编写高质量JavaScript ...
随机推荐
- vmware中设置ubuntu静态ip
概括一下过程中遇到的三个问题: 1.如何修改虚拟机为静态ip并且生效 2.设置完静态ip后,无法上网 3.设置完静态ip且能上网后,宿主机无法ping通虚拟机 问题1:参考https://www.ji ...
- fiddler的安装于使用(一)安装fiddler
Fiddler的简介 Fiddler是位于客户端和服务器端之间的代理,也是目前最常用的抓包工具之一 .它能够记录客户端和服务器之间的所有 请求,可以针对特定的请求,分析请求数据.设置断点.调试web应 ...
- codeforces 733D Kostya the Sculptor(贪心)
Kostya is a genial sculptor, he has an idea: to carve a marble sculpture in the shape of a sphere. K ...
- hud 1633 Orchard Trees 点是否在三角形内模板 *
Orchard Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- POJ 3083 Children of the Candy Corn (DFS + BFS)
POJ-3083 题意: 给一个h*w的地图. '#'表示墙: '.'表示空地: 'S'表示起点: 'E'表示终点: 1)在地图中仅有一个'S'和一个'E',他们为位于地图的边墙,不在墙角: 2)地图 ...
- docker容器内 java应用程序启动慢
原谅我对JVM 不是很熟悉. 参考http://hongjiang.info/tomcat-startup-slowly-in-docker/ 感谢作者.
- Empire – PowerShell 后渗透攻击框架
0x01 简介 Empire是一个后开发框架.它是一个纯粹的PowerShell代理,具有加密安全通信和灵活架构的附加功能.Empire具有在不需要PowerShell.exe的情况下执行PowerS ...
- FreeSql (十五)查询数据
FreeSql在查询数据下足了功能,链式查询语法.多表查询.表达式函数支持得非常到位. IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnect ...
- 【第十二篇】微信支付(APP)集成时碰到的问题(.net提示“无权限”、iOS跳转到微信支付页面中间只有一个“确定”按钮)(转)
直入主题之前,请容我吐槽一下微*的官方东西:ASDFQ%#$%$#$%^FG@#$%DSFQ#$%.......:吐槽玩了!大家心照就好. 要完成手机APP跳转到微信的APP进行微信支付,需要进行如下 ...
- Unity3D_UGUI与NGUI的区别与优缺点
1. NGUI与UGUI的区别 1) UGUI的Canvas 有世界坐标和屏幕坐标; 2) UGUI的Image可以使用material; 3) UGUI通过Mask来裁剪,而NGUI通过Panel的 ...