老师,麻烦您看下这里怎么可以跨过function f1()直接带哦用它的局部函数

老师,麻烦您看下这里怎么可以跨过function f1()直接带哦用它的局部函数

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

登陆购买课程后可参与讨论,去登陆

5回答
qq_修炼者_0 2018-04-16 14:53:38

首先 nAdd是一个全局变量,在f1()外面访问一个全局变量是可以的,nAdd变量里面存在function地址,所以nAdd()的时候是可以执行的。至于为什么他可以加1,就要分析预解析的时候它做了什么了,预解析的时候nAdd外面的n会赋值undefined,里面的n因为没有var声明所以不会预解析,所以在程序执行逐行读代码的时候,nAdd函数局部作用域里面的n找不到,就到外面去了,刚好遇到f1里面的n了不仅解析了还赋了值,所以nAdd里面的n可以计算---》1000

慕慕3263797 2018-04-11 20:14:41

如果这样理解对你有帮助,你就这么理解吧。因为在函数外部访问不到函数内部的局部变量,所以有了闭包,来解决这个问题,建议你不要在这扣理论了,多敲点代码,多实践会对理解更有帮助的。

慕慕3263797 2018-04-11 18:01:25

你应该好好看看闭包这个课,多查点资料。这个闭包之所以能被外部访问,是因为使用return将它抛了出来。其次按你说的除闭包函数函数外的相对于父函数的内部作用域被销毁了,那调用闭包函数时,就访问不到父函数内的变量了,可现实情况是,可以访问到的,所以f1创建的作用域是不会被销毁的。

  • 提问者 慕粉3125272 #1
    我觉得内部函数的确是被销毁了,只不过在销毁之前把里面得代码复制了一份出来交给了rs(仅限于f2),关键是nAdd()相当于是在全局作用域调用了局部的变量,不应该啊
    2018-04-11 18:16:23
怎么都被占用了呢 2018-04-11 11:56:39

首先纠正一点,f1内的函数、变量不是所有的都能被外部访问的。其次你所说的声明周期是指函数执行完之后,作用域被销毁么,这种情况形成的作用域是不会被销毁的。

  • 提问者 慕粉3125272 #1
    只有闭包函数才能被外部访问嘛,相当于是调用了闭包函数的父函数之后,闭包函数相当于是全局的,可以被外部访问(仅限于闭包),还有闭包函数的生命周期不会被销毁,只有除闭包函数函数外的相对于父函数的内部作用域才会被销毁
    2018-04-11 12:02:19
怎么都被占用了呢 2018-04-11 11:20:56

你是想说跨过f1()函数调用的那一步吗,这个是不行的。如果不调用一次f1的话,里面的nAdd函数就不能被定义,自然就不能被正常调用了。

  • 提问者 慕粉3125272 #1
    意思就是说,在没有调用f1的情况下,那么f1内部的函数变量都没有被定义,之哟被调用了,里面的函数,变量就会被定义,此时,外部的函数都能进行调用它内部的函数,变量,但是f1内部的函数及变量还是具有身命周期的啊
    2018-04-11 11:26:07
  • 提问者 慕粉3125272 #2
    函数的声明和定义区别是啥,就是说在声明的同时同时传值?
    2018-04-12 10:44:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师