Javascript函数调用,参数传递,闭包和作用域实例分析

来源:互联网 发布:ios 读取网页数据 编辑:程序博客网 时间:2024/06/06 13:58
        在某个群里看到一张图,有人问了一个问题,为何进界面点击事件会触发,暂且抛开这个问题,看下这段代码
        首先,showDeferentAddress这个函数没有传参,
        没有参数传递进来,该函数在执行时会沿着作用域链向上查找该变量,直到顶层,客户端中就是window,这样以来,这个函数只能在存在数组longitudes,latitudes,codes,lables的上下文中调用,否则会找不到数组变量。
        其中使用了百度地图jsApi,其中point是经纬度对象,Label是文字标签,map是BMap对象,同样道理,map对象也需要在上下文中存在。
        然后是addEventListener中的传递的函数问题,函数名后面带圆括号,意味着这个函数开始执行,而传递进addEventListener的是getLowAddress的返回值,如果没有return,则是undefined。也就是说,在遍历的过程中绑定事件的时候,getLowAddress函数已经开始执行了,而绑定的事件要么是该函数的返回值,要么是undefined,自然没法通过click触发。
        然后是闭包问题,通过匿名函数触发带参函数,可以这么写,
    label.point = point;     label.index = i;    label.addEventListener('click', function(){        getLowAddress(codes[this.index], this.point);    });
        当然也可以使用bind方法,传递非匿名的带参函数,
    label.addEventListener('click', getLowAddress.bind(this(或者getLowAddress), codes[i], point));
阅读全文
0 0
原创粉丝点击