Cesium--Property机制中的CallbackProperty理解与回调函数闭包的试探性理解

21 篇文章 20 订阅

闭包

老生常谈的问题,能搜索闭包的人,必然对闭包有了一定的认识,需求走起.

1.一个数组,里面存储的是一组函数,该函数的功能是使传入的参数值+1并返回.
在这里插入图片描述
在这里插入图片描述
可以看到,在调用测试的时候,我们期望返回2,而结果也刚好符合;没有问题;

2.上面是强行创建,但是当数组增多,这样手动创建肯定是不方便的;比如,我要往数组里添加1000条函数,肯定不能手动创建,我们要用到循环;现在我需要循环往数组里添加20条数据,每条数据都存储着函数,该函数将传入的值+3并返回.
在这里插入图片描述
在这里插入图片描述
结果也是符合预期的

3 那么问题来了,我这个人,就好没事找事;我现在有个需求,我要求这个数组里面的函数,能够按照循环添加的方式进行原数返回;
在这里插入图片描述
这里我们是期望返回3的;但是结果呢?
在这里插入图片描述
那么为什么会这样呢?

原因:由于i在循环的过程中,一直是被调用的,当i=19时,进行最后一次循环,此时的str里面的函数都是这样的:str[function(){return 19}…];然后i=20时,循环结束,此时str[function(){return 20}];所以当我们去调用的时候,i已经为20了;

如果说从本质上来理解,是需要涉及到栈堆问题的;由于JS又没有C++指针的概念,解释起来颇为不便;以下是我个人的理解,其中有些概念是错误的;意会即可.
在这里插入图片描述
当for开始循环的时候,会在栈里面创建一个变量i,然后i的值会从0到20进行变化,无论值怎么变,到最后都是存放到了i中,所以最后给数组str的i就是最后的那个值20;

解决办法

1.es6提供了let方法,让变量的作用域块化
在这里插入图片描述
在这里插入图片描述
2.其实说白了,就是var i声明的i成了全局变量呀;大家都可以使用;我们只要把i变成局部的就行了;我们知道,函数是可以隔离变量的啊;在函数内部的变量外部是访问不到的啊,想访问或者改变都是要通过get/set方法的啊;
在这里插入图片描述
在这里插入图片描述
当然咯,简化版,我们可以使用立即执行函数:
在这里插入图片描述
在这里插入图片描述
当然咯,闭包的问题博大精深,但是本质就是利用函数进行作用域的转化;想要融会贯通,就要理解函数对作用域的理解,然后在佐以立即执行函数就高大上了.

回调函数

回调函数那就博大精深了,比闭包牛多了;生活中处处可见啊.不得不佩服先人们的智慧啊;比如啊,牛顿发明了万有引力,我们学习了万有引力就可以利用其搞事情了.这就是回调啊,其本质就是在做一件事的时候,需要另一个事情处理的结果进行推进.这可能说的比较模糊,下面我们来看例子.
在这里插入图片描述
在这里插入图片描述
也就是说,在我创建自己规则的时候,利用别人书写的函数,对其结果进行处理转化;这样的话,在开发的时候,各个模块就能够很好的兼容并包,不用你一个人搞了;比如公司有两个前端啊,一个是和后台对接处理数据的,一个是展示数据的;处理数据的每次封装个函数没有回调,都是

funciton hello(){return "hello world"};
那我展示数据的每次调用,都要先var res=hello();进行接收数据,然后在去把res进行展示;特别是对vue这些框架来说,
是很费劲的;如果有回调,我展示数据的直接hello(function(data){数据绑定到html中});这样就方便很多了.

当然了,回调的方式有很多种,不仅可以在结果处理完后回调,也可以在结果处理前回调;本质上就是你在处理一个业务的时候,能够在这个业务处理的前,中,后随时进行其他业务的处理;只不过我们常用的都是在处理后去回调,毕竟符合面向过程嘛;总不能先擦屁股在拉屎吧;

CallbackProperty动画回调实现

在这里首先感谢这位作者,写的比较全,看了下,受益匪浅
https://www.jianshu.com/p/f0b47997224c
我要在cesium里面实现直线随着时间逐渐变化的效果:在这里插入图片描述
实现思路:先画一条线(简单),然后监听时间变化,对其位置进行重新赋值
在这里插入图片描述
其实我是希望这里能够有像setInterval(fn,time)类的函数;不过这里好像只能这样监听;具体如何还需要研究;

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值