少女学习日记——函数进阶、闭包以及递归

2024-02-23 15:40

本文主要是介绍少女学习日记——函数进阶、闭包以及递归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

 函数递归

 函数定义

 构建函数的方法

代码展示

 函数调用以及this的指向

 代码展示

高阶函数

概念

严格模式

目的 

使用模式

严格模式带来的变化

闭包及应用

概念

应用

递归及应用

概念

应用

总结


前言

       作为一个正在学习前端的小白,感觉学到面向对象编程略微的有点吃力。好记性不如烂笔头,记录下来准是没错的,多写几篇博客好好记录我的学习!这一篇主要是从函数进阶闭包以及递归总结一下。

 函数递归

 函数定义

       首先我们要明白:所有的函数都是Function的实例对象,也就是说所有的函数其实都是对象。通过new就可以构造一个函数对象。

 构建函数的方法

  • 自定义函数:function  函数名(){}
  • 匿名函数:var  fn = function(){ }
  • new Function:var fn = new Function('参数1','参数2',....,'函数体') 注意这里是字符串

代码展示

 <script>// 自定义函数:function 函数名(){ }function fn1() {return "我是一个自定义函数,我的名字叫fn1";}// 匿名函数:var fn = function(){ }var fn2 = function () {return "我是一个匿名函数,我没有名字。fn2是接收我的变量名不是我的名字。";}// new Function:var fn = new Function('参数1', '参数2',....,'函数体');var fn3 = new Function('a', 'b','console.log("a和b是我的形参,我是函数体。我们都必须是字符串!")');</script>

 函数调用以及this的指向

 代码展示

/* 1. 普通函数 */
function fn() {console.log('人生的巅峰');
}fn(); /* 2. 对象的方法 */
var o = {sayHi: function() {console.log('人生的巅峰');}
}
o.sayHi();/* 3. 构造函数*/
function Star() {};
new Star();/* 4. 绑定事件函数*/btn.onclick = function() {};   // 点击了按钮就可以调用这个函数/* 5. 定时器函数*/
setInterval(function() {}, 1000);  这个函数是定时器自动1秒钟调用一次/* 6. 立即执行函数(自调用函数)*/
(function() {console.log('人生的巅峰');
})();

高阶函数

概念

      高阶函数是对其他函数进行操作的函数;函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。最典型的就是作为回调函数。

参数:接收函数作为参数;

返回值:将函数作为返回值输出。

 代码展示

function add(x, y, f) {return f(x) + f(y);
}//用代码验证一下:
add(-5, 6, Math.abs); // 11当调用add(-5, 6, Math.abs)时,
参数x,y和f分别接收-5,6和函数Math.abs,根据函数定义,可以推导计算过程为:
x = -5;   y = 6;    f = Math.abs;
f(x) + f(y) ==> Math.abs(-5) + Math.abs(6) ==> 11;
结果就是11;

严格模式

目的 

1.消除了Javascript语法的一 些不合理、不严谨之处,减少了一些怪异行为。
2.消除代码运行的一些不安全之处,保证代码运行的安全。
3.提高编译器效率,增加运行速度。
4.禁用了在ECMAScript的未来版本中可能会定义的一些语法,为未来新版本的Javascript做好铺垫。比如一些保留字如: class, enum, export, extends, import, super不能做变量名.

使用模式

  • 为脚本开启严格模式(IE10)
  • 为函数开启严格模式
<script>(function (){//在当前的这个自调用函数中有开启严格模式,当前函数之外还是普通模式"use strict";var num = 10;function fn() {}
})();</script><script>"use strict"; //当前script标签开启了严格模式</script><script>//当前script标签未开启严格模式
</script>

严格模式带来的变化

  • 变量名  必须先声明再使用
  • 不能随意删除已经声明的变量(delete语法 删除)
  • 全局作用域下,普通函数this指向不再是 window 是 undefined
  • 构造函数不加 new调用 this指向  undefined , 给它赋值则会报错
  •  定时器里面的 this  指向仍然是window
  • 函数不能有重名的参数
  • 不允许在非函数里面使用代码块, 非函数举例:if语句   for循环

闭包及应用

概念

     一个函数有权访问另一个函数作用域中的变量的函数。主要作用就是延伸了变量的作用范围,主要实现原理就是return一个闭包函数。闭包的局部变量会等所有函数调用完毕之后才销毁。 

应用

递归及应用

概念

      如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解:函数内部自己调用自己, 这个函数就是递归函数。

      注意:递归函数的作用和循环效果一样,由于递归很容易发生“栈溢出”错误(stack overflow)形式死循环,所以必须要加退出条件return。

应用

//利用递归函数求1~n的阶乘 1 * 2 * 3 * 4 * ..nfunction fn(n) {if (n == 1) { //结束条件return 1;}return n * fn(n - 1);}console.log(fn(3));//结果为6

总结

  这一篇学习日记就先写到这里!学习永无止境!

这篇关于少女学习日记——函数进阶、闭包以及递归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739113

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学