首页 > 编程语言 >javascript基础知识之闭包和递归

javascript基础知识之闭包和递归

时间:2022-11-09 15:23:54浏览次数:45  
标签:闭包 局部变量 函数 递归 javascript 之闭 基础知识 内存 变量

一,什么是闭包,会出现什么问题?如何避免?

1、函数里面包含的子函数,子函数访问父函数的局部变量
2、通过return将子函数暴露在全局作用域,子函数就形成闭包
3、通过闭包,父函数的局部变量没有被销毁,可通过闭包去调用 ,但同时,这个局部变量也不会被全局变量污染。

二、闭包的优点和缺点

优点: 避免全局变量的污染,同时,局部变量没有被销毁,驻留在内存中,还可以被访问
缺点: 使用不当,会造成内存泄露
作用是:通过一系方法,将函数内部的变量(局部变量)转化为全局变量
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

三、产生闭包的解决方案

1、修改this指向,通过apply,call,bind方法解决

2、通过箭头函数,将内部普通函数改为箭头函数即可访问外部函数的变量

 

 

 

一,什么是递归,出现什么问题?如何避免?
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。
简单理解:函数内部自己调用自己, 这个函数就是递归函数
递归很容易发生“栈溢出”错误(stack ),所以必须要加退出条件 return。

递归必须由以下两部分组成。

递归调用的过程。

递归终止的条件。

在没有限制的情况下,递归运算会无终止地自身调用。因此,在递归运算中要结合 if 语句进行控制,
只有在某个条件成立时才允许执行递归,否则不允许调用自身。
可以利用尾递归

标签:闭包,局部变量,函数,递归,javascript,之闭,基础知识,内存,变量
From: https://www.cnblogs.com/zhixi/p/16873799.html

相关文章

  • 使用Javascript查找图像上的坐标
    下面的代码在页面标题中。GetCoordinates函数使用window.event方法查找单击鼠标时的坐标。它还需要考虑任何滚动和图像在文档中的位置,以便坐标始终相对于图像的左上角。......
  • vue运行或打包报错Ineffective mark-compacts near heap limit Allocation failed-Jav
    vue运行或打包报错:Ineffectivemark-compactsnearheaplimitAllocationfailed-JavaScriptheapoutofmemory问题:用npmrundev启动项目或者npmrunbuild打包会报em......
  • 用JavaScript实现按钮的事件委托并且区分按钮
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content......
  • 1.基础知识(3) --Matlab绘制特殊的图形
    1、指定坐标轴刻度值和标签自定义沿坐标轴的刻度值和标签有助于突出显示数据的特定方面。以下示例说明一些常见的自定义,例如修改刻度值的放置位置、更改刻度标签的文本和格......
  • JavaScript函数总结
    定义函数形如functionabs(x){if(x>=0){returnx;}else{return-x;}}或varabs=function(x){if(x>=0){......
  • 18 个杀手级 JavaScript One Lines
    英文|https://javascript.plainenglish.io/18-killer-javascript-one-liners-%EF%B8%8F-b11f0c796024翻译|杨小二1、复制到剪贴板使用navigator.clipboard.writeText......
  • 5 个 JavaScript 字符串操作库
    英文|https://blog.bitsrc.io/5-string-manipulation-libraries-for-javascript-9ca5da8b4eb8翻译|杨小二使用字符串可能是一项繁琐的任务,因为有许多不同的用例。例如,将......
  • JavaScript基础
    一、JavaScript基础(一)变量和数据类型1、JavaScript介绍​ 1)JavaScript是什么?​ JavaScript是运行在客户端(浏览器)的编程语言,实现人机交互。​ 2)作用​ 网页特效(监听......
  • JavaScript
    JavaScriptJS基础语法1.JS三部分:ECMAScript:规定了基础语法DOM:文档对象模型BOM:浏览器对象模型2.书写位置:内嵌式:所以的js中的代码都是单引号行内式外部式:......
  • JavaScript中的箭头函数
    前言本文可以让你了解所有有关JavaScript箭头函数的信息。我们将告诉你如何使用ES6的箭头语法,以及在代码中使用箭头函数时需要注意的一些常见错误。你会看到很多例子来说......