博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript 立即执行函数
阅读量:5136 次
发布时间:2019-06-13

本文共 1061 字,大约阅读时间需要 3 分钟。

http://weizhifeng.net/immediately-invoked-function-expression.html

var f1 = function() {    var res = [];    var fun = null;    for(var i = 0; i < 10; i++) {        fun = function() { console.log(i);};//产生闭包        res.push(fun);    }    return res;}
var res = f1();for(var i = 0; i < res.length; i++) {    res[i]();}

以上会输出十个10,原因分析如下:

闭包产生,内部函数引用外部函数的变量,并且这个变量所占的内存是不会释放的,就会导致这个i的值是10,

因此内部函数在执行的时候,会输出十个10。

 

解决这个问题的方式为立即执行函数:

var f1 = function() {    var res = [];    var fun = null;    for(var i = 0; i < 10; i++) {
(function(index) {            fun = function() {console.log(index);};            res.push(fun);        })(i);     }
return res;}

 

 

在JavaScript的OOP中,我们可以通过IIFE来实现,如下:

var counter = (function(){    var i = 0;     return {        get: function(){            return i;        },        set: function( val ){            i = val;        },        increment: function() {            return ++i;        }    };}());counter.get(); // 0counter.set( 3 );counter.increment(); // 4counter.increment(); // 5

转载于:https://www.cnblogs.com/voctrals/p/3713882.html

你可能感兴趣的文章
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
企业级应用与互联网应用的区别
查看>>
itext jsp页面打印
查看>>
Perl正则表达式匹配
查看>>
DB Change
查看>>
nginx --rhel6.5
查看>>
Eclipse Python插件 PyDev
查看>>
selenium+python3模拟键盘实现粘贴、复制
查看>>