透过【百度地图API】分析双闭包问题

简介: 原文:透过【百度地图API】分析双闭包问题摘要:   有位API爱好者问到,昨天的教程里为什么不使用for循环?他使用for循环后,也发现代码无效。这是什么原因? -----------------------------------------------------------------...
原文: 透过【百度地图API】分析双闭包问题

摘要:

  有位API爱好者问到,昨天的教程里为什么不使用for循环?他使用for循环后,也发现代码无效。这是什么原因?

-------------------------------------------------------------------------------------------------------

我们先来看看他的问题:

寒山 2011-9-8 23:37:36

方法一

for(var i=0; i<marker.length; i++){
marker[i].addEventListener(
"mouseover", function(){
this.openInfoWindow(infoWindow[i]); });
}

  

方法二

marker[2].addEventListener("mouseover", function(){
this.openInfoWindow(infoWindow[2]);});
marker[1].addEventListener("mouseover", function(){
this.openInfoWindow(infoWindow[1]);});

  


用户提问:
这两种方式有什么区别吗? 为什么前面用循环的不可以,后面的就可以..


-------------------------------------------------------------------------------------------------------



解答:

首先,我们要知道,this.openInfoWindow(infoWindow[i])中的i最后的值是marker.length-1

数组的下标是从0开始的,0,1,2……(N-1)

以闭包方式解决的原因如下:

i是外层的变量,是callback上层作用域的,callback执行的时候,for已经循环完了。创建一个闭包,相当于在内存中创建一个地方,专门存储起来。


所以,可以用双闭包的方式解决:

for(var i=0;i<marker.length;++i){
(
function(x){
    marker[x].addEventListner("mouseover",function(){
this.openInfoWindow(infoWindow[x]);
    });
})(i);
}

  



双闭包的代码会创建marker.length*2个匿名函数。下面这段代码只有一个_openInfoWindow。

所以,我们换一种方式:

function _openInfoWindow(){
this.openInfoWindow(this._infoWindow);}
for(var i=0;i<markers.length;++i){
marker[i]._infoWindow
= infoWindow[i];
marker[i].addEventListner(
"mouseover",_openInfoWindow);
}

  



-------------------------------------------------


结论:

能尽量用别的方式,就不要用闭包解决问题。否则会影响到性能。


目录
相关文章
|
2月前
|
缓存 API 定位技术
使用Python调用百度地图API实现地址查询
使用Python调用百度地图API实现地址查询
118 0
|
2月前
|
数据采集 运维 数据挖掘
API电商接口大数据分析与数据挖掘 (商品详情店铺)
API接口、数据分析以及数据挖掘在商品详情和店铺相关的应用中,各自扮演着重要的角色。以下是关于它们各自的功能以及如何在商品详情和店铺分析中协同工作的简要说明。
|
3月前
|
资源调度 监控 API
开源API网关APISIX分析与使用
开源API网关APISIX分析与使用
208 0
|
3月前
|
API
GEE案例分析——利用sentinel-3数据计算空气污染指数(Air Pollution Index,简称API)
GEE案例分析——利用sentinel-3数据计算空气污染指数(Air Pollution Index,简称API)
117 0
|
数据采集 数据可视化 算法
电商API接口的大数据分析与挖掘技巧
随着电商行业的快速发展,电商平台上的交易数据量也越来越大。如何对这些数据进行分析和挖掘,从中获取有价值的信息,已经成为电商企业和开发者关注的重点。本文将介绍电商API接口的大数据分析与挖掘技巧。
|
5天前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
13天前
|
数据可视化 Python
R语言量化技术分析的百度指数关注度交易策略可视化
R语言量化技术分析的百度指数关注度交易策略可视化
|
24天前
|
存储 Java API
使用Stream API进行数据处理和分析
【4月更文挑战第18天】Java 8的Stream API为高效声明式处理集合数据提供了革命性功能。Stream非存储、不重复、有顺序且只能消费一次。创建Stream可通过集合、`Stream.of()`、`Stream.generate()`和`Stream.iterate()`。中间操作如`filter()`、`map()`和`sorted()`不改变原流,而终端操作如`forEach()`、`toArray()`和`collect()`结束流并产生结果。
|
2月前
|
自然语言处理 API 语音技术
Python加百度语音API实现文字转语音功能
Python加百度语音API实现文字转语音功能
63 0
|
4月前
|
缓存 供应链 安全
淘宝API接口调用:案例分析与最佳实践(续)
淘宝API接口是连接商家与淘宝平台强大功能的重要桥梁。通过案例分析和最佳实践的分享,我们希望商家能够更深入地理解如何有效地使用这些API来优化电商业务。随着技术的不断进步,淘宝API的功能将会越来越丰富,而商家面临的挑战也会越来越大。因此,商家需要不断地学习新技术、探索新方法,并且不断完善自己的API使用策略,以便更好地适应市场的变化,赢得竞争的优势。