设为首页收藏本站

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 69|回复: 6

技术问题:javascript之闭包,不知道这样理解对不对

[复制链接]

11

主题

38

回帖

137

积分

注册会员

积分
137
发表于 2020-8-26 12:08:42 | 显示全部楼层 |阅读模式
所谓闭包,是指访问和写入局部作用域的机制。
说到底,是对局部作用域的访问,(给子过程保存现场),类似于delphi中的property
****什么情况下需要闭包,我认为只有在异步调用子逻辑时,才有用****

1.访问[没什么卵用,在上层声明变量不香吗?]
  (function(){
      var b=0;
      return function() {return b++}
      //return function() {return b}
      })()
  上面返回了一个函数,访问不了b,但可以操作b   
  
2.写入
  (function(x){
      var b=x;
      return function() {return b++}
      //return function() {return b}
      })(5)
  上面返回了一个函数,并且初始化了局部作用域
  
“写入”  实例:*下面两段代码,随便打开一个网页,F12在console中运行* 看效果
var eles=document.getElementsByTagName("A")
for (var i=0;i薅羊毛[/url]
回复

使用道具 举报

149

主题

6786

回帖

1万

积分

论坛元老

积分
14097
发表于 2020-8-26 12:10:56 | 显示全部楼层
这个是真的不懂、
回复

使用道具 举报

11

主题

199

回帖

471

积分

中级会员

积分
471
发表于 2020-8-26 12:11:29 | 显示全部楼层
es6以后,let就可以咯

回复

使用道具 举报

5

主题

184

回帖

419

积分

中级会员

积分
419
发表于 2020-8-26 12:11:53 | 显示全部楼层


闭包应该是一种思维吧
回复

使用道具 举报

143

主题

728

回帖

1957

积分

金牌会员

积分
1957
发表于 2020-8-26 12:25:01 | 显示全部楼层
用let就可以重复变量名了
回复

使用道具 举报

2

主题

133

回帖

356

积分

中级会员

积分
356
发表于 2020-8-26 12:26:02 | 显示全部楼层
本帖最后由 我是一个大水怪 于 2020-8-26 14:04 编辑

```
所谓闭包,是指访问和写入局部作用域的机制。
```
你这种就是典型的因为缺乏正确的学习方式/他人引导而走歧途,结果无外乎:

- 思考偏了,只能坐井观天,看到你所能看到的部分,而缺乏对概念、术语的正统理解
- 思维过虑,本来很简单的东西,如果是正确的学习方式自然而然理解,而错误的学习方式让你怀疑自己是否真的弄懂了,所以你后面的思考得到的举例都是思维过虑的典型表现

闭包的概念来自函数式编程,看看wiki就能基本了解它的正统概念了。或者随便一门函数式编程课程,甚至编程入门课程如sicp-python,都能系统性的理解函数式编程或者编程相关的术语概念。

回到主题,用我的话来说(个人归纳),闭包就是函数式编程语言的一个基本特性,当关联外部函数局部变量(对于内部函数来讲就是自由变量)的内部函数作为返回值返回时,这些自由变量就一直有效,直到该内部函数失效。这样,函数就拥有了状态,不同于传统的无状态模型。

我归纳的其实同样是误人子弟,但是我系统学习后的理解,与正统理解偏差不会太大。完全的正统理解看你个人需求,对我而言基本理解就可以了,除非我要给别人传道授业。
回复

使用道具 举报

42

主题

836

回帖

1840

积分

金牌会员

积分
1840
发表于 2020-8-26 12:30:30 | 显示全部楼层
我都是把它理解成一个封闭的作用域,防止污染
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2026-3-19 01:43 , Processed in 0.014304 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表