开发者社区> 问答> 正文

js事件监听中传递匿名函数与具名函数的区别,都是内存地址引用,但是结果不一样

项目中有个需求,事件第一次执行(立即执行)与后几次执行不同,但是传递具名函数,返回结果一样。。如果通过匿名函数内再嵌套具名函数,结果就能返回正确!代码如下:
screenshot
screenshot
//上面这个代码初始化打印1,之后点击打印2。

之前jquery写的,以为是jquery问题,原生测试也一样(chrome环境下)!

尝试过从几个地方理解(执行时上下文,运行时上下文,事件调用,都不能理解),既然都是内存地址引用,按道理应该都是返回第二段代码的结果,不理解。

展开
收起
a123456678 2016-03-13 09:44:07 2442 0
1 条回答
写回答
取消 提交回答
  • 这么说吧,
    
    var o1 = x=> console.log(1);
    var o2 = x=> console.log(2);
    第一张,定义了一个函数 fn = o1 添加事件监听函数相当于把其赋值到另一个变量。即eventfn = fn; 那么后面在执行fn = o2 的时候 eventfn 还是o1,不会因为fn变成了也变成o2。
    
    var fn = o1;
    var evetfn = fn;
    eventfn();
    fn = o2;
    eventfn();
    第二张,定义了一个函数fn = o1,然后 eventfn 是另外一个匿名函数(不是fn),其中使用了 fn。所以后面fn = o2 那么 eventfn 运行的时候调用的 fn() 就是输出 2 呀。
    
    var fn = o1;
    var eventfn = function(){fn();};
    eventfn();
    fn = o2;
    eventfn();
    2019-07-17 19:01:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript 语言在引擎级别的执行过程 立即下载
Python第五讲——关于爬虫如何做js逆向的思路 立即下载
JavaScript面向对象的程序设计 立即下载