请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师看完闭包这一节,我还是有点疑问

因为之前一直用Java,不太了解闭包的概念,学完课程之后,我明白了闭包的概念是:

在一个函数A中返回了另一个函数B,只有函数B才可以访问函数A中的内容,这个现象的概念叫做闭包

我有两个疑问:
第一个是:

@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block()
    return this
}

想apply这种方法当函数(表达式)以参数的形式传递进去,这属不属于闭包?

第二个疑问是:
看了您的例子,我还是不太明白闭包到底可以用在哪里?老师能不能给一些 常用的地方,或者深刻的例子.能够更好的加深理解.

正在回答 回答被采纳积分+3

1回答

bennyhuo 2019-02-18 21:17:52

闭包简单说就是函数内部可以有状态,这个得前提就是函数本身是对象。javascript 当中会经常用到,java背景的程序一般都会按照JAVA的思路写,不常见到了。比如柯里化之类的特性就需要基于这个特性。

apply这个严格意义上不涉及闭包,因为没有涉及状态,也没有在函数内部定义函数。

0 回复 有任何疑惑可以回复我~
  • 提问者 Da丶 #1
    可能我没看到后面,柯里化函数我还没学到那里,等等就看到了,到时候好好理解一下.
    1.另外提到apply是因为,我看apply的方法是将函数作为参数传入另外一个函数中,从闭包的概念来看,传入的函数也是拥有父函数的全部状态,所以当时想到这个是不是闭包.
    2.确实之前没接触过,这块后面好好了解一下.
    回复 有任何疑惑可以回复我~ 2019-02-18 21:22:53
  • bennyhuo 回复 提问者 Da丶 #2
    apply传入的函数,并不知道apply里面有什么,就算有也没有办法访问,更何况apply里面也确实什么都没有。所以不算一个闭包的例子。
    
    闭包还是着眼于在一个函数内部定义函数,那么这个函数就拥有了外部函数的状态。有点儿非静态内部类的感觉。
    回复 有任何疑惑可以回复我~ 2019-02-18 21:27:14
  • 提问者 Da丶 回复 bennyhuo #3
    明白了.谢谢老师
    回复 有任何疑惑可以回复我~ 2019-02-18 21:29:00
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信