cesium项目问题解决

    技术2022-07-13  65

    1、文字标注穿透

    问题描述:开启了深度测试,导致文字标注随地球转动

    解决:利用css显示和隐藏,得到地球中心点坐标,得到可视化区域,当移动地球时,目标已不在这个经纬度区域,故隐藏。

    2、settimeout的闭包问题

    在解决问题1时,需要先得到标注ThePrimitive1,但发现输出undefined,检查后发现是在定时器中执行得到ThePrimitive1的代码,产生了闭包。

    在函数运行完之后,内部的函数是要被销毁的而且函数中有与外部同名的变量的时候,会优先采用自己内部的变量,达到避免命名冲突,而且外部函数访问不到内部函数的变量(作用域链)

    //正常执行代码 var ThePrimitive1 = undefined; setTimeout(function(){ //给ThePrimitive1 赋值 //ThePrimitive1 = ; }, 3000); console.log(ThePrimitive1) //undefined; //解决闭包时的代码(错误) //!!!!!!!!!!!出现问题,定时器上面的代码没有执行,直接执行定时器了(原因不明) setTimeout((function(){ //给ThePrimitive1 赋值 //ThePrimitive1 = ; })(), 3000); console.log(ThePrimitive1) //这里输出也是undefined,因为ThePrimitive1定义时是基本数据类型,是值传递。 //而且按照时间循环机制来看,也是undefined //如果要这个输出实体对象,将ThePrimitive1定义为对象,这样就是引用传递了; //解决闭包时的代码(没有其他问题) 自执行函数 // var primitive = _this.ThePrimitive1; //_this.ThePrimitive1=undefined; (function () { _this.timer = setTimeout(function () { //给primitive 赋值 primitive = ; //移动地球时的操作 _this.moveEarth(Eq_data, primitive); }, 3000); })();

    自执行函数 

    //定时器中解决闭包的两种实现方式:输出0 1 2 3 4 5 //方法1:自执行函数 for(var i=0;i<5;i++){ (function(num){ setTimeout(function(){ console.log('delayer:' + num );//操纵变量num,和i无关 创建了自己的作用域 }, 0); })(i); // i是参数 对应着a console.log(i); } //方法2: for(var i=0;i<5;i++){ setTimeout((function(){ console.log('delayer:' + i ); })(), 0); console.log(i); }

    区别在哪???? 

    setTimeout((function(){ })(), 3000); (function () { setTimeout(function () { }, 3000); })();

     

    3、传值,传引用

    基本数据类型传值,对象传引用

    https://www.jianshu.com/p/8af82d696ce1

     通过实参调用函数的时候,传入函数里的是实参的副本而不是实参,因此在函数里面修改参数值并不会对实参造成影响。

    Processed: 0.015, SQL: 9