透过【百度地图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);
}

  



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


结论:

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


目录
相关文章
|
10月前
|
缓存 数据可视化 定位技术
快递鸟快递API技术指南:获取物流轨迹信息与轨迹地图的解决方案
在当今电商竞争激烈的环境中,物流体验已成为提升用户满意度的关键因素。研究表明,超过 75% 的消费者会因物流信息不透明而放弃下单。
2083 1
|
10月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
11月前
|
自然语言处理 监控 API
小红书爆文解码:用API分析互动数据,精准指导创作方向
在内容为王时代,爆文背后有科学公式!通过小红书API抓取百万笔记数据,提炼出点赞转化率、收藏价值系数、评论情感值三大核心指标,揭秘爆文特征不等式与内容元素矩阵,手把手教你用数据驱动创作,实现从0到百万曝光的逆袭!
1266 0
|
11月前
|
数据采集 API
京东:调用用户行为API分析购买路径,优化页面跳转逻辑
京东通过整合用户行为API,构建购买路径分析体系,运用马尔可夫链模型识别高损耗、断裂与冗余路径,优化页面跳转逻辑。实施流程合并、预加载及实时干预策略,转化率提升30.2%,路径缩短34.9%,跳转失败率下降78.7%,实现数据驱动的精细化运营。
|
11月前
|
缓存 监控 供应链
唯品会自定义 API 自定义操作深度分析及 Python 实现
唯品会开放平台提供丰富API,支持商品查询、订单管理、促销活动等电商全流程操作。基于OAuth 2.0认证机制,具备安全稳定的特点。通过组合调用基础接口,可实现数据聚合、流程自动化、监控预警及跨平台集成,广泛应用于供应链管理、数据分析和智能采购等领域。结合Python实现方案,可高效完成商品搜索、订单分析、库存监控等功能,提升电商运营效率。
|
11月前
|
缓存 监控 供应链
京东自定义 API 操作深度分析及 Python 实现
京东开放平台提供丰富API接口,支持商品、订单、库存等电商全链路场景。通过自定义API组合调用,可实现店铺管理、数据分析、竞品监控等功能,提升运营效率。本文详解其架构、Python实现与应用策略。
机器学习/深度学习 搜索推荐 算法
294 0
缓存 监控 供应链
385 0
缓存 监控 数据挖掘
260 0
|
11月前
|
数据采集 数据可视化 API
巧用唯品会 API,精准分析唯品会女性时尚商品销售趋势
本文介绍如何利用唯品会API分析女性时尚商品销售趋势。通过API获取数据、清洗处理后,结合时间序列分析与可视化,精准把握市场需求变化,助力商家优化库存和营销策略,提升用户体验与营收。