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(); // 0
counter.set( 3 );
counter.increment(); // 4
counter.increment(); // 5

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

Javascript 立即执行函数相关推荐

  1. JavaScript立即执行函数报错--立即执行函数原理分析

    JavaScript立即执行函数报错 1.'()'在JavaScript环境中有提升运算符优先级和执行函数的作用如果直接在JavaScript环境中执行'()',环境会报出语法错误提示. 2.'()' ...

  2. JavaScript自执行函数,自执行函数是什么,存在的意义?

    JavaScript自执行函数 1.自执行函数是什么 2.自执行函数存在的意义 2.1封装 3.自执行函数两种常见的的写法 3.1自执行函数的第一种写法 3.2自执行函数的第二种写法 4.自执行函数的 ...

  3. JavaScript 自执行函数剖析

    回想一下,我们平时写的一些具名函数(也就是区别于匿名函数的函数),如下面一个例子: 1 function sayHello(){ 2 console.log("hello,我是林丽君&quo ...

  4. Javascript 自执行函数

    前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下"自执行"这个叫法,本文对这个功能的叫 ...

  5. JavaScript 立即执行函数的两种写法

    (function(str){console.log(str+'欢迎你~');})('行步至春深');(function(str) {console.log(str+'欢迎你~');}('行路易知难' ...

  6. JavaScript 自执行函数和 jQuery扩展方法

    我们通常将JS代码写在一个单独的JS文件中,然后在页面中引入该文件.但是,有时候引入后会碰到变量名或函数名与其它JS代码冲突的问题.那么如何解决这个问题呢?作用域隔离.在JS中,作用域是通过函数来划分 ...

  7. javascript自执行函数

    概述 自执行函数又被称为立即调用函数,顾名思义,就是可以函数声明后可以立即被执行,我们在读常用js库(如jquery)源码时,经常会发现自执行函数的身影,下面说下我的理解. 写法 自执行函数有两种写法 ...

  8. JavaScript立即执行函数学习

    1.新建对象,方法内变量作用域理解错误 var md1 = {count: 0,add: function () {count++;},sub: function () {count--;},show ...

  9. JavaScript 自执行函数(闭包)

    1. 全局污染 在变量声明的时候有一个规则:重复声明无效 var num = 123; var num = 'abc'; 重复声明的代码不会报任何错误,但是其声明特征就没有了,会转换成普通赋值语句 故 ...

最新文章

  1. 信鸽 ios tag推送 php,iOS 关于信鸽推送点击推送通知的处理
  2. php无法加载dll插件,php无法加载动态库怎么办
  3. Java面试笔试题整理
  4. 20145212 《信息安全系统设计基础》第2周学习总结
  5. 线性判别结合源码分析LDA原理
  6. 二、bootstrap4基础(flex布局)
  7. signature=800c2934bb72de8d2912c36e4444ceb9,Detection and Quantification of Stiction
  8. OpenStack 的Nova组件详解
  9. leetcode 208 python3
  10. vSphere vsan 6.5部署之一VCSA6.5安装
  11. 有关数组知识点的小结
  12. 数字信号C语言——平均分布随机数
  13. ssh连接服务器协议错误,Xmanager发生SSH协议错误怎么办
  14. 西门子plc电源开关如何选型
  15. 怎样屏蔽(去掉)csdn博客侧栏广告
  16. Android 9.0打开wifi时关闭热点流程
  17. 珍珠项链(洛谷-P2768)(Dp矩阵加速)
  18. 1370. Increasing Decreasing String
  19. Chrome开发工具Network没有显示完整的http request和response对话
  20. 平安科技美国研究院院长韩玫:AI赋能传统行业,要知其然也知其所以然

热门文章

  1. 实战MHDD检测硬盘
  2. python123第四周作业_科学计算和可视化
  3. 用到的python组件
  4. 从二进制数据流中构造GDAL可以读取的图像数据
  5. ctypealpha php_PHP Ctype函数(转)
  6. JavaWeb——springMVC异常处理器
  7. MySql数据导入导出及解决ERROR2006(MySQL server has gone away)错误
  8. linux device attr,DEVICE_ATTR的使用
  9. svg如何平铺 html5,如何在HTML5中使用SVG
  10. linux普通用户id一般是,实际用户ID和有效用户ID (一) *****