html js 回调函数,js中回调函数的学习笔记
回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考。
回调函数原理:
我现在出发,到了通知你”
这是一个异步的流程,“我出发”这个过程中(函数执行),“你”可以去做任何事,“到了”(函数执行完毕)“通知你”(回调)进行之后的流程
例子
1.基本方法
function doSomething(callback) {
// …
// Call the callback
callback('stuff', 'goes', 'here');
}
function foo(a, b, c) {
// I'm the callback
alert(a + " " + b + " " + c);
}
doSomething(foo);
或者用匿名函数的形式
function dosomething(damsg, callback){
alert(damsg);
if(typeof callback == "function")
callback();
}
dosomething("回调函数", function(){
alert("和 jQuery 的 callbacks 形式一样!");
});
2.高级方法
使用javascript的call方法
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
// Call our callback, but using our own instance as the context
callback.call(this);
}
function foo() {
alert(this.name);
}
var t = new Thing('Joe');
t.doSomething(foo); // Alerts "Joe" via `foo`
传参数
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback, salutation) {
// Call our callback, but using our own instance as the context
callback.call(this, salutation);
}
function foo(salutation) {
alert(salutation + " " + this.name);
}
var t = new Thing('Joe');
t.doSomething(foo, 'Hi'); // Alerts "Hi Joe" via `foo`
使用 javascript 的 apply 传参数
function Thing(name) {
this.name = name;
}
Thing.prototype.doSomething = function(callback) {
// Call our callback, but using our own instance as the context
callback.apply(this, ['Hi', 3, 2, 1]);
}
function foo(salutation, three, two, one) {
alert(salutation + " " + this.name + " – " + three + " " + two + " " + one);
}
var t = new Thing('Joe');
t.doSomething(foo); // Alerts "Hi Joe – 3 2 1" via `foo`
例子
//假如提供的数据源是一整数,为某学生的分数,当num<=0,由底层处理,当n>0时由高层处理.
//将下面这个函数拷贝下来存盘为1.js
function f(num,callback){
if(num<0) {
alert("调用低层函数处理!");
alert("分数不能为负,输入错误!");
}else if(num==0){
alert("调用低层函数处理!");
alert("该学生可能未参加考试!");
}else{
alert("调用高层函数处理!");
callback();
}
}
//将下面这个test.html文件存盘与1.js在一个目录下:
/p>
"http://www.w3.org/TR/html4/loose.dtd">
无标题文档
function test(){
var p=document.getElementById("pp");
pp.innerText="";
var num=document.getElementById("score").value;
f(num,function(){ //匿名高层处理函数
if(num<60) alert("未及格!");
else if(num<=90) alert("该生成绩优良!");
else alert("该生成绩优秀!"); })
pp.innerText="by since1978 qq558064!"
}
回调函数示例:当学生成绩score<=0分时候,由底层处理;当score>0时,由高层处理。
请输入学生成绩
下面是其它网友的补充:
javascript中的回调模式:
形如:
function writeCode(callback){
//执行一些事物,
callback();
//...
}
function intrduceBugs(){
//....引入漏洞
}
writeCode(intrduceBugs);
我们传递函数的应用给writeCode(),让writeCode在适当的时候来执行它(返回以后调用)
先看一个不怎么好的例子(后续要对其重构):
//模拟查找页面中的dom节点,将查找到的节点存在数组里面统一返回
//此函数只用于查找不对dom节点做任何的逻辑处理
var findNodes = function(){
var i = 100000;//大量的循环,
var nodes = [];//用于存储找到的dom节点
var found;
while(i){
i -=1;
nodes.push(found);
}
return nodes;
}
//将查找找到的dom节点全部隐藏
var hide = function(nodes){
var i = 0,
max = nodes.length;
for(;i
//findNodes后面有括号代表立即执行,先执行findNodes()然后执行hide()< hide(findNodes()); 执行函数 } ;
nodes[i].style.display="none"
}
上面的方法是低效的,以为hide()必须再次遍历有findNodes()返回的数组节点,如何避免这种多余的循环呢。
我们不能直接在findNodes中对查询到的节点进行隐藏(这样检索就可修改逻辑耦合了),那么他就不再是一个通用函数了。
解决方法是用回调模式,可以将节点隐藏逻辑以回调函数方式传递给findNodes()并委托其执行
//重构findNodes以接受一个回调函数
var findNodes = fucntion(callback){
var i = 100000,
nodes = [],
found;
//检查回调函数是否可用调用的
if(typeof callback !== 'function'){
callback = false;
}
while(i){
i -= 1;
if(callback){
callback(found);
}
nodes.push(found);
}
return nodes;
}
//回调函数
var hide = function(node){
node.style.display = 'none ';
}
//找到后续节点并在后续执行中对其进行隐藏
findNodes(hide);//先执行findNodes然后执行hide,当然回调函数也可以在调用主函数时创建:findNodes(function(node){node.style.display = 'none';});
html js 回调函数,js中回调函数的学习笔记相关推荐
- html中text函数,Excel中text函数的使用方法
说到Excel,相信大家都再熟悉不过了,但说到Excel中text函数的使用方法,可能很多人都不太熟悉,下面随学习啦小编一起看看吧. Excel中text函数的使用方法 首先解释一下text函数的基本 ...
- linux 内核 fget,fgets函数 linux中fgets函数怎么用
一个函数该如何使用?我们最先要了解的就是这个函数的语法以及具体的含义是什么,所以今天我们就来看一看fgets函数在实际的运用过程当中是如何使用的,希望能给大家带来一定的帮助. fgets函数--lin ...
- mysql中sign函数_Oracle中sign函数和decode函数的使用
在逻辑编程中,经常用到If ndash; Then ndash;Else 进行逻辑判断.在DECODE的语法中,实际上就是这样的逻辑处理过程.它的语法 1.比较大小函数SIGN sign(x)或者Si ...
- C++ 中 参数包 (typename ...) 学习笔记
C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...
- 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)
数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...
- web前端分享HTML5中的nav标签学习笔记
好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...
- python中execute函数_python中的函数是如何使用的?
欢迎关注「issnail」感谢! "一起学习,一起成长!" 1.定义函数与调用函数 定义python函数:依次输入def.函数名.带有函数参数的圆括号,最后紧跟一个冒号(:) 函数 ...
- c++语言swap函数,C++中swap函数
本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template void swap(T &a ...
- c语言createthread函数,C++中CreateThread函数创建线程的用法和实例
CreateThread是一种微软在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程.线程终止运行后,线程对象仍然在系统中,必须通过CloseHandle函数来关 ...
- python local函数_python中的函数
函数 一.函数的定义 def是可执行的代码.def创建了一个对象并将其赋值给某一变量名.def语句是实时执行的,即:def在运行时才进行评估,而在def之中的代码在函数调用后才会评估.函数本身就是一个 ...
最新文章
- Oracle 用户表空间的创建和授权
- linux iptables详解
- Java8简明学习之接口默认方法
- 数据中台产品经理面试指南(二)
- 关于开源中国手机App的说明
- c语言汇编混合编程写一个乘法,求通过C语言实现矩阵的加、减及乘法。要自己写的,不要复制过来...
- 安卓升级鸿蒙,网友实测从安卓升级到鸿蒙2.0:可用内存和机身存储容量都增加了...
- java之父_java之父:被下载达7000万次的编程视频教程,你还没有看过?
- QT实现头像图片剪切框
- keep-alive + vuex + mint + Infinite scroll 保存分页列表数据
- Cisco基础(六):配置目前网络环境、项目阶段练习
- 网页制作初期,必须的东西
- tiptop对接泛微OA详细步骤
- 使用rsync实现客户端与服务器端的文件同步与传送
- 打印 条码 CodeSoft JsBarCode
- php隐藏下载外链,教你如何去掉友荐和无觅的隐藏外链和版权链接
- Redis数据类型和应用场景
- 分享几个写英文论文的网页和软件
- 常用windows XP 系统命令
- DD每周前端七题详解-第五期
热门文章
- java的for循环取出数据只是拿到最后一个_如何保证缓存与数据库双写的一致性...
- devsecops_DevSecOps管道和工具:您需要了解的内容
- (14)css—伪类选择器
- (13) css浮动补充
- 前端:JS/17/前篇总结(JS程序的基本语法,变量),数据类型-变量的类型(数值型,字符型,布尔型,未定义型,空型),数据类型转换,typeof()判断数据类型,从字符串提取整数或浮点数的函数
- Git笔记(38) 凭证存储
- java最大最小距离算法缺点_java算法(蓝桥杯)- 算法提高 题目1 最大最小值
- centos 6.8安装git_git 入门教程之 git 私服搭建教程
- PHP中如何判断属性类型,php – 如何获取doctrine实体属性的类型
- NOIP2013NOIP2018USACO 三倍经验铺路题巧妙解法