Javascript 立即执行函数
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 立即执行函数相关推荐
- JavaScript立即执行函数报错--立即执行函数原理分析
JavaScript立即执行函数报错 1.'()'在JavaScript环境中有提升运算符优先级和执行函数的作用如果直接在JavaScript环境中执行'()',环境会报出语法错误提示. 2.'()' ...
- JavaScript自执行函数,自执行函数是什么,存在的意义?
JavaScript自执行函数 1.自执行函数是什么 2.自执行函数存在的意义 2.1封装 3.自执行函数两种常见的的写法 3.1自执行函数的第一种写法 3.2自执行函数的第二种写法 4.自执行函数的 ...
- JavaScript 自执行函数剖析
回想一下,我们平时写的一些具名函数(也就是区别于匿名函数的函数),如下面一个例子: 1 function sayHello(){ 2 console.log("hello,我是林丽君&quo ...
- Javascript 自执行函数
前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下"自执行"这个叫法,本文对这个功能的叫 ...
- JavaScript 立即执行函数的两种写法
(function(str){console.log(str+'欢迎你~');})('行步至春深');(function(str) {console.log(str+'欢迎你~');}('行路易知难' ...
- JavaScript 自执行函数和 jQuery扩展方法
我们通常将JS代码写在一个单独的JS文件中,然后在页面中引入该文件.但是,有时候引入后会碰到变量名或函数名与其它JS代码冲突的问题.那么如何解决这个问题呢?作用域隔离.在JS中,作用域是通过函数来划分 ...
- javascript自执行函数
概述 自执行函数又被称为立即调用函数,顾名思义,就是可以函数声明后可以立即被执行,我们在读常用js库(如jquery)源码时,经常会发现自执行函数的身影,下面说下我的理解. 写法 自执行函数有两种写法 ...
- JavaScript立即执行函数学习
1.新建对象,方法内变量作用域理解错误 var md1 = {count: 0,add: function () {count++;},sub: function () {count--;},show ...
- JavaScript 自执行函数(闭包)
1. 全局污染 在变量声明的时候有一个规则:重复声明无效 var num = 123; var num = 'abc'; 重复声明的代码不会报任何错误,但是其声明特征就没有了,会转换成普通赋值语句 故 ...
最新文章
- 信鸽 ios tag推送 php,iOS 关于信鸽推送点击推送通知的处理
- php无法加载dll插件,php无法加载动态库怎么办
- Java面试笔试题整理
- 20145212 《信息安全系统设计基础》第2周学习总结
- 线性判别结合源码分析LDA原理
- 二、bootstrap4基础(flex布局)
- signature=800c2934bb72de8d2912c36e4444ceb9,Detection and Quantification of Stiction
- OpenStack 的Nova组件详解
- leetcode 208 python3
- vSphere vsan 6.5部署之一VCSA6.5安装
- 有关数组知识点的小结
- 数字信号C语言——平均分布随机数
- ssh连接服务器协议错误,Xmanager发生SSH协议错误怎么办
- 西门子plc电源开关如何选型
- 怎样屏蔽(去掉)csdn博客侧栏广告
- Android 9.0打开wifi时关闭热点流程
- 珍珠项链(洛谷-P2768)(Dp矩阵加速)
- 1370. Increasing Decreasing String
- Chrome开发工具Network没有显示完整的http request和response对话
- 平安科技美国研究院院长韩玫:AI赋能传统行业,要知其然也知其所以然
热门文章
- 实战MHDD检测硬盘
- python123第四周作业_科学计算和可视化
- 用到的python组件
- 从二进制数据流中构造GDAL可以读取的图像数据
- ctypealpha php_PHP Ctype函数(转)
- JavaWeb——springMVC异常处理器
- MySql数据导入导出及解决ERROR2006(MySQL server has gone away)错误
- linux device attr,DEVICE_ATTR的使用
- svg如何平铺 html5,如何在HTML5中使用SVG
- linux普通用户id一般是,实际用户ID和有效用户ID (一) *****