git clone https://github.com/joyent/node.git cd node/ ./configure make make install make test make doc curl http://npmjs.org/install.sh | sh npm install -g n npm install -g supervisor npm install -g node-inspector node --debug-brk=5858 debug.js node-inspector
Node.js不适合做的事情
计算密集型的程序
如果有计算密集型程序,给用户一个提示,说服务器正在处理
单用户多任务型应用
Node.js进程之间的通信很不便
逻辑十分复杂的事务
Node.js适合处理逻辑简单但是访问频繁的任务
Unicode与国际化
Node.js不支持完整的Unicode,很多字符无法用string来表示.
只能把所有字符当作二进制的buffer数据来处理
作用域
if(true){ var somevar='value'; } console.log(somevar);//输出 value,因为if,for 语句中的花括号不是独立的作用域
作用域从里到外
var v1='v1'; var f1=function(){ console.log(v1);// 输出v1 }; f1(); var f2=function(){ var v1='local'; console.log(v1);// 输出 v2 } f2();
var scope='global'; var f=function(){ console.log(scope);// 输出undefined var scope='f';//屏蔽上层scope的定义 }
var f=function(){ var scope='f0'; (function(){ var scope='f1'; (function(){ console.log(scope);//输出f1 })(); })(); }; f();
var scope='top'; var f1=function(){ console.log(scope); }; f1();//输出top var f2=function(){ var scope='f2'; f1(); } f2();//输出top
JavaScript的作用域是静态作用域,是在定义时决定的,不是在调用时决定的。
闭包
var generateClosure=function(){ var count=0; var get=function(){ count++; return count; }; return get; }; var counter=generateClosure(); console.log(counter());//输出1 console.log(counter());//输出2 console.log(counter());//输出3
闭包作用实现嵌套的回调函数
实现私有成员
引号建议用单引号,因为JSON,XML都规定必须使用双引号,这样便于无转义地直接引用。
等号建议使用===
var num=9; var literal='9' if(num===literal){ console.log("ok") }