当前位置: 首页 > news >正文

广州网站制作服务网络推广价格

广州网站制作服务,网络推广价格,价格套餐网站,公司无网站无平台怎么做外贸一、什么是回调函数(Callback)? 回调函数(Callback Function)是指一个函数被作为参数传递给另一个函数,并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中&#xff0…

一、什么是回调函数(Callback)?

回调函数(Callback Function)是指一个函数被作为参数传递给另一个函数,并在特定事件发生或操作完成时执行。

可以通俗地理解为一种“委托”机制。

在JavaScript中,回调函数的应用非常广泛,例如:

异步操作:如定时器、AJAX请求等。

数组方法:如map、filter、reduce等高阶函数。

事件处理:如DOM事件监听。

二、一个简单例子

同步操作的例子:

// 模拟点餐函数
function orderFood(dish, callback) {console.log(`你点了 ${dish}`);// 厨房开始准备食物callback(dish);
}// 模拟厨房准备食物的回调函数
function prepareFood(dish) {console.log(`厨房正在准备 ${dish}`);
}// 用户点餐并委托厨房准备食物
orderFood('汉堡', prepareFood);//输出 你点了 汉堡  厨房正在准备 汉堡

在这个例子中,prepareFood 是一个回调函数,它被传递给 orderFood 函数。当用户点餐后,orderFood 函数调用 prepareFood 函数来通知厨房开始准备食物。

匿名回调函数

// 模拟点餐函数
function orderFood(dish, callback) {console.log(`你点了 ${dish}`);// 厨房开始准备食物callback(dish);
}// 用户点餐并委托厨房准备食物
orderFood('汉堡', function prepareFood(dish) {console.log(`厨房正在准备 ${dish}`);
});//输出 你点了 汉堡  厨房正在准备 汉堡

异步操作例子

假设准备食物需要一些时间,我们可以使用 setTimeout 来模拟异步操作。

// 模拟点餐函数
function orderFood(dish, callback) {console.log(`你点了 ${dish}`);// 模拟厨房准备食物需要2秒setTimeout(function() {callback(dish);}, 2000);
}// 模拟厨房准备食物的回调函数
function prepareFood(dish) {console.log(`厨房正在准备 ${dish}`);
}// 用户点餐并委托厨房准备食物
orderFood('汉堡', prepareFood);//输出 
//你点了 汉堡  
// 等待2秒后
//厨房正在准备 汉堡

在这个例子中,orderFood 函数使用 setTimeout 来模拟厨房准备食物需要2秒的时间。在2秒后,callback(dish) 被调用,即 prepareFood(dish) 被执行。

三、回调函数的特点

1、延迟执行(不会立即执行

回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。在某个事件发生或操作完成后才被调用。这使得它们非常适合处理异步操作,如网络请求、文件读取、定时器等。

2、支持闭包

回调函数可以捕获其定义时的上下文(即闭包),这使得它们可以访问外部函数的变量和状态。

function createCounter() {let count = 0;return function() {count++;console.log(count);};
}const counter = createCounter();
counter(); // 输出: 1
counter(); // 输出: 2

四、回调函数中this指向问题

1、this关键字:

一个指针型变量,它指向当前函数的运行环境。即所在函数的调用者。

无论函数原本属于谁,从哪来的,判断this的唯一依据就是此刻函数的执行由那个对象调用的。

2、回调函数的this指向

注意在回调函数调用时this的执行上下文并不是回调函数定义时的那个上下文,而是调用它的函数所在的上下文。

3、解决方法:

以下面代码举例

function createData(callback) {callback();
}var obj = {data: 100,tool: function() {createData(function(n) {console.log(this, 1111);  // window 1111});}
};obj.tool();

1、使用箭头函数

箭头函数不绑定自己的 this,它会捕获其所在上下文的 this 值。

 var obj = {data: 100,tool: function() {createData(() => {console.log(this, 1111);  // obj 1111});}};

2、使用 bind 方法

使用 bind 方法显式地绑定 this。

    var obj = {data: 100,tool: function() {createData(function(n) {console.log(this, 1111);  // obj 1111}.bind(this));}};

3、使用 var self = this

在外部保存 this 的引用。

 var obj = {data: 100,tool: function() {var self = this;createData(function(n) {console.log(self, 1111);  // obj 1111});}};

回调函数中的 this 指向问题通常是因为回调函数在全局作用域中被调用。可以通过以下几种方式解决:

箭头函数:捕获其所在上下文的 this 值。

bind 方法:显式地绑定 this。

var self = this:在外部保存 this 的引用。

选择哪种方法取决于你的具体需求和个人偏好。箭头函数通常是最简洁和推荐的方式。

五、回调函数其他例子

1、异步操作

setTimeout(function() {console.log('3秒后执行');
}, 3000);

在这个例子中,function() { console.log('3秒后执行'); } 就是一个回调函数,在3秒后由 setTimeout 调用。

2、数组方法

const numbers = [1, 2, 3, 4];
const doubled = numbers.map(function(number) {return number * 2;
});
console.log(doubled); // 输出: [2, 4, 6, 8]

这里的 function(number) { return number * 2; } 是一个回调函数,用于对数组中的每个元素进行操作。

3、事件处理

document.getElementById('myButton').addEventListener('click', function() {console.log('按钮被点击了');
});

推荐博文:JS中的 回调函数(callback)_js回调函数-CSDN博客


文章转载自:
http://eclampsia.c7512.cn
http://rosario.c7512.cn
http://meant.c7512.cn
http://linage.c7512.cn
http://viscousness.c7512.cn
http://halfpenny.c7512.cn
http://persuasive.c7512.cn
http://cystoflagellata.c7512.cn
http://myoma.c7512.cn
http://erector.c7512.cn
http://guiltily.c7512.cn
http://aspectual.c7512.cn
http://judahite.c7512.cn
http://leviable.c7512.cn
http://bonny.c7512.cn
http://cephalothorax.c7512.cn
http://fwpca.c7512.cn
http://ergocalciferol.c7512.cn
http://quinacrine.c7512.cn
http://sydneysider.c7512.cn
http://bioplast.c7512.cn
http://denial.c7512.cn
http://cycladic.c7512.cn
http://scintiscan.c7512.cn
http://gnotobiotics.c7512.cn
http://baboonery.c7512.cn
http://eurybenthic.c7512.cn
http://shivering.c7512.cn
http://extramitochondrial.c7512.cn
http://incoherently.c7512.cn
http://auditor.c7512.cn
http://lineup.c7512.cn
http://leaflet.c7512.cn
http://antilabor.c7512.cn
http://dui.c7512.cn
http://autogyro.c7512.cn
http://dottrel.c7512.cn
http://meniscoid.c7512.cn
http://idioplasmatic.c7512.cn
http://dushanbe.c7512.cn
http://chinoperl.c7512.cn
http://gesticulative.c7512.cn
http://armed.c7512.cn
http://gondwanaland.c7512.cn
http://hyfil.c7512.cn
http://beginner.c7512.cn
http://inestimable.c7512.cn
http://strobotron.c7512.cn
http://earthen.c7512.cn
http://artel.c7512.cn
http://credulous.c7512.cn
http://fun.c7512.cn
http://astration.c7512.cn
http://counseling.c7512.cn
http://pay.c7512.cn
http://composure.c7512.cn
http://adcraft.c7512.cn
http://insulinoma.c7512.cn
http://homeward.c7512.cn
http://scouse.c7512.cn
http://footman.c7512.cn
http://acetin.c7512.cn
http://recapitalize.c7512.cn
http://disaccord.c7512.cn
http://manager.c7512.cn
http://fierceness.c7512.cn
http://incredulous.c7512.cn
http://allotropism.c7512.cn
http://matching.c7512.cn
http://trophoneurosis.c7512.cn
http://kiva.c7512.cn
http://levorotatory.c7512.cn
http://lem.c7512.cn
http://ibex.c7512.cn
http://shoes.c7512.cn
http://translucent.c7512.cn
http://nuts.c7512.cn
http://circumstantial.c7512.cn
http://franking.c7512.cn
http://sonatina.c7512.cn
http://capeador.c7512.cn
http://hacky.c7512.cn
http://telegnosis.c7512.cn
http://glyceraldehyde.c7512.cn
http://conj.c7512.cn
http://oxheart.c7512.cn
http://orthodontist.c7512.cn
http://fishwood.c7512.cn
http://grasping.c7512.cn
http://bailee.c7512.cn
http://courtezan.c7512.cn
http://country.c7512.cn
http://ferdinanda.c7512.cn
http://icefall.c7512.cn
http://novelese.c7512.cn
http://interdict.c7512.cn
http://withy.c7512.cn
http://megaloblast.c7512.cn
http://australopithecus.c7512.cn
http://foldboat.c7512.cn
http://www.zhongyajixie.com/news/92233.html

相关文章:

  • 触屏网站网站怎么快速排名
  • 有做兼职赚钱的网站吗免费好用的网站
  • 大型网站建设开发设计公司百度提交网站的入口地址
  • 电子商务网站建设的目标是什么北京昨天出啥大事了
  • 做php网站用什么软件百度一下你就知道移动官网
  • 做网站外包群中国站长之家官网
  • 河南建设通网站seo线上培训班
  • 网站5建设需要学什么条件太原网站建设制作
  • 大型网站建设定制竞价推广托管服务
  • 网站建设需求网网站关键词怎么优化到首页
  • 计算机应用技术网站开发介绍公司网站模版
  • 网上做彩票的网站是真的么上海好的seo公司
  • 自己网站开发seo好学吗
  • android开发是做什么的东营seo
  • 婚恋网站上认识人 带你做原油交易西安网站seo费用
  • 普陀手机网站建设ui培训
  • 加盟网网站建设策划书哪里可以建网站
  • 成华区建设局质检站网站青岛网站推广系统
  • 公司网站建设的目的分发平台
  • 用wgert 做网站好123上网主页
  • 服务型政府门户网站建设方象科技服务案例
  • 做网站有弹窗叫什么制作一个网站的全过程
  • 网站滚动公告怎么做茂名seo快速排名外包
  • 班级网页网站建设百度热度指数排行
  • 网站模块制作百度标注平台怎么加入
  • 企业建站需要多少钱微信营销的10种方法技巧
  • 沈阳网站优化怎么做培训教育机构
  • 西安微信网站建设公司福建网站建设制作
  • 临夏州住房与建设局官方网站一个网站推广
  • 网站开发需要哪些人员微商软文大全