课程名称:前端工程师2022版
课程章节:函数
课程讲师: 慕课网
课程目标:掌握函数的基本用法,尤其是递归和闭包
课程内容:
1.函数的定义于作用
2.函数拓展-算法面试题
3. 递归与克隆
4. 作用域和闭包
JavaScript 使用关键字 function 定义函数。
函数可以通过声明定义,也可以是一个表达式。
带参数的函数
function calcPerimeter(a, b, c) { // a, b, c 分别代表三条边 var sum = a + b + c; return sum; } // 调用函数 并将返回值赋值给perimeter var perimeter = calcPerimeter(3, 4, 5);
不带参函数(匿名函数)
函数表达式:就是把函数存到变量里。
匿名函数:没有名字的函数;
匿名函数在使用时只有两种情况:
匿名函数自执行:声明后不需要调用就直接执行
//2,函数表达式:把函数存到变量或数组等里,调用时通过变量进行调用 var fn = function(){ console.log("函数表达式:将函数存到变量里"); }; fn();//调用时需要写括号 //2,函数表达式:把函数存到数组第0位,调用时通过数组第0位进行调用 var arr = []; arr[0] = function(){ console.log("函数表达式:将函数存到数组的对应位置"); }; arr[0]();//调用时需要写括号要写括号
函数的作用域
函数有他自己的作用域,函数内声明的变量等通常情况下不能被外部访问,但是函数可以访问到外部的变量或者其他函数等
var a = 1; function fn() { var b = 2; console.log(a); // 输出:1 console.log(b); // 输出:2 } fn(); console.log(b); // ReferenceError: b is not defined
递归函数介绍
递归是函数的高级用法,本质上是函数自已调用自已
递归函数特性
重复执行
调用自身
【必须】要有条件控制,避免死循环
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> // 利用递归函数求1-100的和 let i = 0 let sum = 0 function getSum() { if (i >= 100) { return sum } // 后边只有一句话,可以省略大括号 i++ sum += i getSum() } getSum() console.log(sum); </script> </body> </html>
闭包是javascript中的一个重要知识点,面试经常问到,需要我们熟练掌握。根据javascript高级程序设计中解释:闭包是指有权访问一个函数作用域中局部变量的函数。
要认知闭包,就要知道js中有两种作用域:全局作用域,局部作用域,与之对应的是全局变量和局部变量。我们都知道在函数内部中可以访问到全局作用域中的全局变量,但是在全局作用域中一般却无法访问某个函数的局部变量。为了解决这个问题,我们必须知道闭包。
<script> // 闭包 function fn() { var arr = []; for(var i=0;i<5;i++) { arr[i] = function() { return i; } } return arr } var list = fn() for(var i =0;i<list.length;i++) { console.log(list[i]()); } </script>
课程截图