文档详情

《JavaScript程序设计》课件——项目3-3 闭包函数和预解析.pptx

发布:2025-05-18约2.01千字共14页下载文档
文本预览下载声明

JavaScript程序设计2021

1课程导入2任务导入3知识讲解4任务实施项目3-1作用域和闭包函数5任务总结

知识回顾任务导入知识讲解任务实施任务总结函数表达式的定义有位置要求吗?箭头函数怎么表示?回调函数的功能是什么?提问

知识回顾任务导入知识讲解任务实施任务总结任务重难点对比变量作用域练习闭包函数重点:变量的作用域作用域链闭包函数预解析

知识回顾任务导入知识讲解任务实施任务总结作用域1.1作用域的分类变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域,JavaScript根据作用域使用范围的不同,划分如下:全局变量:不在任何函数内声明的变量(显式定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量局部变量:在函数体内利用var关键字定义的变量称为局部变量块级变量:ES6提供的let关键字声明的变量称为块级变量1.作用域demo.js文件函数含有{},如for函数作用域全局作用域块级作用域

知识回顾任务导入知识讲解任务实施任务总结作用域1.2全局变量和局部变量两者的区别:在全局作用域下,添加或省略var关键字都可以声明全局变量,全局变量在浏览器关闭页面的时候才会销毁,比较占用内存资源在函数中,添加var关键字声明的变量是局部变量,省略var关键字时,如果变量在当前作用域下不存在,会自动向上级作用域查找变量。局部变量在函数执行完成后就会销毁,比较节约内存资源

知识回顾任务导入知识讲解任务实施任务总结作用域在开发中若要保留局部变量的值,可以通过以下两种方式实现://第1种方式:利用return返回functiontest(num){num=num+1;returnnum;}varnum=test(24);console.log(num);//输出结果:25//第2种方式:利用全局变量保存varmemory;functiontest(num){memory=num+1;}test(24);console.log(memory);//输出结果:25

知识回顾任务导入知识讲解任务实施任务总结作用域1.3作用域链作用域链:当在一个函数内部声明另一个函数时,内层函数只能在外层函数作用域内执行,在内层函数执行的过程中,若需要引入某个变量,首先会在当前作用域中寻找,若未找到,则继续向上一层级的作用域中寻找,直到全局作用域,称这种链式的查询关系为作用域链。

知识回顾任务导入知识讲解任务实施任务总结作用域全局作用域vari=10;fn1函数fn2函数alert(i);作用域链符号含义参考F:表示向上查找N:没有找到Y:找到NFNFY

知识回顾任务导入知识讲解任务实施任务总结闭包函数2.闭包函数2.1什么是闭包函数所谓“闭包”指的就是有权访问另一函数作用域内变量(局部变量)的函数。主要的两点用途如下:可以在函数外部读取函数内部的变量可以让变量的值始终保持在内存中注意:由于闭包会使得函数中的变量一直被保存在内存中,内存消耗很大,所以闭包的滥用可能会降低程序的处理速度,造成内存消耗等问题。

知识回顾任务导入知识讲解任务实施任务总结闭包函数2.2闭包函数的实现闭包的常见创建方式就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量可以在函数外部读取函数内部的变量。functionfn(){vartimes=0;varc=function(){return++times;};returnc;}varcount=fn();//保存fn()返回的函数,count就是一个闭包console.log(count()); //输出结果:1console.log(count()); //输出结果:2console.log(count()); //输出结果:3示例代码

知识回顾任务导入知识讲解任务实施任务总结预解析JavaScript解析器在运行JavaScript代码的时候会进行预解析,也就是提前对代码中的var变量声明和function函数声明进行解析,然后再去执行其他的代码。//输出结果:undefinedconsole.log(num);varnum=10;//报错,提示num2isnotdefinedconsole.log(num2);0varnum;//undefinedconsole.log(num);num=10;var预解析3.预解析

知识回顾任务导入知识讲解任务实施任务总结总结:本章主要对闭包函数、在JavaScript中var变量声明和function函数声明的预解析进行了讲解。作业:练习课上讲解的函数。

感谢聆听

显示全部
相似文档