javascript回调函数详解
在⾼级语⾔层出不穷的年代, 各个语⾔都号称有着⼀切皆为对象的⾃豪说法, ⽽ js 作为⼀门脚本语⾔却相对于java等传统⾯向对象语⾔有很⼤的不同之处, 除了 js 诡异的继承体系之外, 最令⼈着迷的⼀个特性就是回调函数, 当然也有很多⼈对他诟病, 笔者认为回调函数和异步是js语⾔特性的两⼤最为突出的店, 当然正如所有优点需要满⾜⾃我的需求, 这个世界没有银弹, ⽐如⼤量的使⽤回调函数将会使你的代码冗余, 错乱影响代码⼈的视觉与思维体验.
本⽂是⾃⼰对学习回调函数的的体会, 难免不完善甚⾄错误, 原谅我的⽆知, 我愿虚⼼学习, 完善⾃⼰.
javascript最独特的就是函数作为⼀等公民, 我更愿意将 js 称为⼀切皆为变量的⼀门⾼级语⾔, 函数也是⼀种变量可以成为其他函数的参数, 我们喜欢在js中称之为回调函数, 另外js中的匿名函数可以作为函数参数使得回调函数的写法如鱼得⽔.
ps. 回调函数与 c 语⾔中的函数指针类似---指针指针指针重要的事情说三遍
先来看⼀下回调函数的定义
In computer programming, a callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time
回调函数是⼀段可执⾏的代码段,它作为⼀个参数传递给其他的代码,其作⽤是在需要的时候⽅便调⽤这段(回调函数)代码。
回调函数
function addSqua(num1, num2, callback){
var sum = num1 + num2;
return callback(sum);
}
function squa(num){
return num*num;
函数prototype}
let num = addSqua(1, 2, squa);
console.log(num);
//=>9
匿名回调函数
将匿名函数直接作为函数参数传递给函数, 这也是我们编程⼀般采⽤的
function addSqua(num1, num2, callback){
var sum = num1 + num2;
return callback(sum);
}
let num = addSqua(1, 2, function squa(num){
return num*num;
});
console.log(num);
/
/=9
模仿数组中的every⽅法
在Array.prototype中添加类似与every⼀样的⽅法
Every = function (callback) {
if (typeof callback === 'function') {
for (let i = 0; i < this.length; i++) {
if (callback(this[i])) {
return false;
}
}
return true;
}
return true;
}
let op = [3, 6, 'every', 9,'each'];
console.log(value);
})
// 3
// 6
// 'every'
// 9
/
/ 'each'
回调函数特点
1. 不会⽴刻执⾏, 正如定义中给出的⼀样回调函数作为代码⽚段可以根据需要在其特定条件下执⾏, 回调函数作为参数传递
给⼀个函数的时候,传递的只是函数的定义并不会⽴即执⾏。
2. this,ES6推出了箭头函数, 箭头函数的推出需要在写回调函数的时候格外注意, this 是指向所在函数的上下⽂对象, 如果
在在ES6采⽤箭头函数则需要注意 this使⽤, 箭头函数中this并没有上下⽂关系直说, 有兴趣的可以查看ES6 阮⼀峰, 再次奉上传送门
回调函数的优点和使⽤场景是个闭包
回调函数是闭包的简单使⽤,也就是说它能访问到其外层定义的变量。
回调函数之美
DRY,避免重复代码。
可以将通⽤的逻辑抽象。
业务逻辑分离 (it's so beautiful ^-^ ^-^)
提⾼代码可维护性和可读性。
加强代码可读性。
分离专职的函数。
js回调函数的伟⼤之处是其他传统语⾔所没有的, 它可以实现业务逻辑分离, 相当于暴露给外界⼀个接⼝, 这⼀点像极了前后端分离架构中的 API 接⼝设计理念
这个世界没有 '银弹' , 没有能够解决所有事情的⼀种⽅案, 由于js为异步⽽⽣, 回调函数⽤的最多的地⽅, 也是最适合的地⽅就是异步编程, 然⽽⼤量的使⽤会使得程序员的代码冗余, 有很⼤的不可读⾏, 体验极差, 索性让⼈⾼兴的事, ⼈们从来没有停⽌过对⾃⼰舒适度的追求。
以上就是本次⼩编整理的关于javascript回调函数的相关知识内容,感谢你对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论