nodejs学习笔记
标签:node 异步 回调 单线程
1. callback 最简单的回调
function test(sth){
console.log(sth)
}
function testCallback(callback,sth){
var sth=sth+"is cool";
callback(sth)
}
testCallback(test,"jade")
注意回调的理解:
将后续逻辑封装的到一个起始函数中作为参数,逐层嵌套。
其实仔细想想一般场景就是在一个函数中先加工参数,再把加工好的参数传给另一个函数。
2. 同步和异步的理解:
同步:想象成向老板查询东西,老板接到电话说我帮你查查啊,就查啊查,查到结果了就告诉你
异步:打电话查东西,老板说我查到了再打电话给你
差不多就这个意思,同步单线程顺序执行,浏览器中加载代码就是同步的,前面写个死循环,会阻塞后面代码执行(浏览器中虽然可以并行下载,但不能并行执行)
顺序执行,下面代码当然执行结果是2
var a=1;
function add(){
a++
}
function print(){
console.log(a)
}
add()
print()
如果我们将add函数改造一下,加入延时会怎么样?
var a=1;
function add(){
//a++
setTimeout(function(){
a++
},0)
}
function print(){
console.log(a)
}
add()
print()
酱紫,会打印什么?
打印出来的是1?黑人问号
理解下啊,浏览器遇到setTimeout就会把它放到一个延时序列里,这个延时序列的执行时机时其他代码执行完毕,so延时0秒也不执行就不奇怪了吧
如何避免这个问题,如何避免这个问题,当然是把函数加到setTimeout的里面咯,like this:
function add(callback){
//a++
setTimeout(function(){
a++
callback()
},0)
}
不要看到calbback
就发毛,这个东西就是个回调函数
网友评论