今天在网上看到了一个原来没有听说过的定义,高阶函数和偏函数。个人觉得这么个形容还是很有创意的。也可能我很土鳖没有见过世面吧!在此稍作解释。
function hignFun(){ return function(a,b){ a+b; } } var add = hignFun();
据说这就是高阶函数,其实这么个称谓我觉得也是比较恰当的.类比高数中的高阶函数,还是比较形象的.起码对于记忆标识这种形式的函数是有帮助的.
var isType = function (type) { return function(obj){ toString.call(obj) == "[object "+type+"]" } } var isArray() = isType("Array");
这样的形式的函数叫做偏函数.大意就是传参进去搞个半成品,返回出来.正式使用的时候再传参完成整个操作.有点像工厂模式.高阶函数和偏函数的唯一区别就是,是否外层函数对内层函数构成影响.要这么来说,偏函数这个称谓的确很恰当.
好了,进入正题.node的基础知识梳理.
1,fs模块
node的异步IO操作是其核心的最重要的技术之一。异步的操作使得避免了传统多线程模式下,频繁切换上下文的大量开销。fs模块提供了一些列的API,已经趋于成熟。
一下给出了一些基本的常用的API示例代码。千万不要复制了去运行,仅仅提供观看功能!
var fs= require("fs"); fs.writeFile('test.txt', 'Hello Node', function (err) { if (err) throw err; console.log('Saved successfully'); //文件被保存 }); fs.appendFile("nodeNote.txt","im coming!!!",function(err){ if (err) throw err console.log("data already add to end of file") }) fs.exists("nodeNote.txt",function(flog){ process.stdout.write(flog+""); }) fs.rename("nodeNote.txt","Note.txt",function(err){ if(err) throw err console.log("rename successfully"); }) fs.readFile("Note.txt",function (err,data) { if(err){ throw err }else{ process.stdout.write(data+" I am data!!"); } }) fs.unlink("n.js",function(err){ if (err) { throw err }; process.stdout.write("remove successful") }) fs.mkdir("n/c",function (err) { if (err) { process.stdout.write(err) }; }) fs.rmdir("./node",function (err) { if (err) { process.stdout.write(err) }; }) fs.readdir("./hz",function(err,files){ if (err) { throw err }; console.log(files); })
以上给出的都是异步的操作,fs模块还提供了同步的操作。具体视情况而定去选择。
2,util模块提供了一些常用的工具方法,主要有对字符串的格式化,判断变量类型等等操作。
var util = require('util'); var result; result = util.inspect(object, showHidden=false, depth=2) result = util.format("%s:%j","abs",{name:2},12); result = util.isArray([1,"hauzi"]); result = util.isDate(new Date()) result = util.isRegExp(/d/) console.log(result)
3,url模块
URL模块主要给出了URL解析相关的一些操作。json2string,string2json。还有具体的域名解析等等
var url = require("url"); var urlString = url.parse("http://www.baidu.com"); for(var key in urlString){ console.log(key+" : "+urlString[key]) } var urlString = url.format({ host:"imooc.com", protocol :"https", port:"80", path:"/news" }) console.log(urlString) var combine = url.resolve("http://baidu.com/","/news"); console.log(combine);
4,querystring
querystring中主要有两个方法,stringify和parse实际上在js中也有实现。JSON.stringify,JSON.parse.那独立到querystring,顾名思义是为了query而准备的了!
var query = require("querystring") var string = query.stringify({name:'huazi',age:22},"^","_"); console.log(string) //name_huazi^age_22 var str = query.parse('name_huazi^age_22','^','_'); console.log(str); //{ name: 'huazi', age: '22' }
5,path
做web的都知道,在处理文件的时候path是个比较麻烦的事情。没有工具的情况下只能手工的处理。当然有了path之后一切轻松了!只列出一部分哦
var path = require("path"); var newpath = path.normalize("../sbin/./apm_available///sbin"); var newpath = path.join("url.js//newpath","//mnt/newpath") var newpath = path.dirname("./nodeNote/dirname/path"); var newpath = path.extname("./url.ht/path.js"); console.log(newpath);
6,child_process
启动一个进程去执行一项任务。特别的fork,exec感觉更加的友好!
var childProcess = require("child_process"); var child = childProcess.spawn("ls"['-l']); child.stdout.on('data',function(data){ console.log(data) }) childProcess.exec("ls -lah",function(err,stdout,stderr){ if (err) { throw err }; console.log(stdout); // }) childProcess.execFile("node util.js",function(err,stdout,stderr){ if (err) { throw err }; console.log(stdout) }); childProcess.fork("querystring.js");
7,os
截图来自nodeAPI中文网。不知道什么时候能用到。只需要判断需求是系统级别的,那估计在这找就没差了!
大致基础部分就这些!如果这些都搞定了,对node就有个基本的了解了!进阶的事情,后面再说!