function fn() {let num = 10 // 只能在函数里面使用,外面看不到---- 数据私有化console.log('外');return function g() {num++console.log(num);}}const res = fn()fn()//外res//外res()//11res()//12fn()()//11 外fn()()//11 外

闭包的作用: 可以让函数外面访问函数内部的变量

现有需求,通过外部访问闭包内层函数,让num每次访问后加一

方法:

1.声明一个变量res = fn(),此时res就为一个函数(可以理解闭包的外层函数)

2.访问内部函数g().我们直接可以使用 res + ()的写法 即 res()来直接访问内层函数g()(调用内层函数g())

原理:

这里的res()的写法,是表示通过给res赋值为fn()这个函数,让res可以直接看成是这个闭包函数的外层函数,想要每次直接访问内层函数,只需要给外层函数加括号,就能直接访问内层函数.

不同的思路:

首先声明这个思路并不能满足上面的需求.但是很接近,容易混淆

提问:我们既然把fn()的值 赋给了res,(res=fn())那是不是代表 res下面的用法可以完全被fn()代替呢?即下面的res()可以用 fn()()代替呢?

回答:不可以!

原因:两者表示的含义完全不同.

fn()()表示 每一次都会先调用外层函数fn()再调用内层函数g(),不管下面写多少次fn()(),num的值每次都会先调用一次外层函数fn()被重新赋值为10,再调用g() 为11,永远只能打印 '外' 和 11

res()这个代码表示它通过fn()这个外层函数,直接调用一次内层函数g(),跳过了每次都会重新调用外层函数fn(),再找内层函数g()的这个过程,所以不管res()写多少次,外层函数中的let num = 10只会声明一次,g()里面num的值会随着res()的使用次数不断累加

js中闭包函数的调用方法相关推荐

  1. python 定义函数方法,python中函数如何定义?python函数的调用方法介绍

    本篇文章给大家带来的内容是关于python中函数如何定义?python函数的调用方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. 函数的概念,函数是将具有独立功能的代码块 ...

  2. 【Python——类】 同一个类中一个函数里调用另一个函数的方法

    [Python-类] 同一个类中一个函数里调用另一个函数的方法 class Solution:def a(self):self.b() # 注意这种写法:self.类名def b(self):prin ...

  3. python如何调用dll库中的函数_Python调用dll库接口-ctypes方法

    背景 最近需要用python写个脚本程序(win10 环境),需要调用现成的dll库完成这项任务,对于一直在Linux平台上开发程序的本人来说,从没有过使用dll的经历(不得不说还是so大法好),遇到 ...

  4. java js中 function函数报错_浅析JS中对函数function的理解(基础篇)

    正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...

  5. Js中匿名函数的理解

    目录 1.js中匿名函数的N种写法 最常见的用法: 2.JavaScript 匿名函数及闭包 2.1 匿名函数 2.1.1 函数的定义 2.1.2 匿名函数的创建 2.2 闭包 2.3 举例 2.4 ...

  6. js中修改this的指向方法整理

    JavaScript(简称"JS") 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言.虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,Ja ...

  7. JS OOP -02 深入认识JS中的函数

    深入认识JS中的函数: 1.概述,认识函数对象 2.函数对象和其他内部对象的关系 3.将函数作为参数传递 4.传递给函数的隐含参数:arguments 5.函数的apply,call方法和length ...

  8. JS中的call()和apply()方法(转)

    转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS 1.方法定义 call方法:  语法:call([thisObj ...

  9. js中call()方法和apply方法的使用

    1. 方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

最新文章

  1. JS中字符串的相关操作
  2. C# 窗体实例化一次
  3. Create your own blockchain amp; cryptocurrency! - understand blockchains by creating one in python
  4. Hadoop中的问题–何时无法交付?
  5. JavaScript实现自适应宽度的瀑布流
  6. 降价200!华为部分手机已取消充电器和数据线,网友表示可以接受
  7. 离开APM的弹性云还是真弹性吗
  8. 4059. 统计某指定字符出现个数
  9. 均值聚类散点图怎么画_用Excel制作一个漂亮的分类散点图
  10. Maven3.5安装配置
  11. 软件选择,iDreamPiano、freepiano、EveryonePiano
  12. 后端学习 Java Web 上半部分(MySQL~RequestResponse)
  13. Android画一条虚线
  14. 用LSTM生成武侠人名
  15. 手机摄像头基础知识-1-缩写篇
  16. H5通过Universal Link(通用链接)唤起app
  17. MATLAB中图像标注工具——Image Labeler的使用方法
  18. 前端一班:HTML5当天学习总结-摘抄张果博客园
  19. 应用层Fiddler抓包工具
  20. I.MX6 FFmpeg 录制视频

热门文章

  1. Centos7 虚拟机联网配置
  2. 细胞图像自动分割与计数软件简介
  3. Android有文件读写权限,无法读写文件 open failed: EACCES (Permission denied) 获取设备唯一不变id 所有文件读写权限按钮无法打开
  4. 永远的颠覆者——奇虎360董事长周鸿祎专访
  5. 个人工具开发【卡片式记忆-面试题】v.1.0.0
  6. postgresql和mysql中的limit使用方法
  7. 数据挖掘中免费数据集下载网站
  8. MNIST——手写数字识别数据集
  9. CSS3如何实现投影正片叠底效果
  10. 耐候玻璃水泥的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告