写在前面 这是一篇译文,原文:Immediately-Invoked Function Expression (IIFE) 原文是一篇很经典的讲解IIFE的文章,很适合收藏.本文虽然是译文,但是直译的很少,而且添加了不少自己的理解. ps:下文中提到的“立即执行函数”其实就是“立即执行函数表达式” 我们要说的到底是什么? 在javascript中,每一个函数在被调用的时候都会创建一个执行上下文,在该函数内部定义的变量和函数只能在该函数内部被使用,而正是因为这个上下文,使得我们在调用函数的时候能创…
立即执行函数,就是在定义函数的时候直接执行,这里不是申明函数而是一个函数表达式 1.问题 在javascript中,每一个函数在被调用的时候都会创建一个执行上下文,在函数内部定义的变量和函数只能在该函数内部调用,正是因为这个上下文,使得在调用函数的时候可以创建一些私有变量.如下代码 //makeCounter,返回一个新的函数(闭包),这个函数可以访问makeCounter里的局部变量i function makeCounter() { var i = 0; return function ()…
一.IIFE解释 全拼Imdiately Invoked Function Expression,立即执行的函数表达式.  像如下的代码所示,就是一个匿名立即执行函数: (function(window, undefined){ // 代码... })(window); 二.括号的意义  2.1 包住function(){}的括号的意义  这个括号的目的,是为了把function(){}转化为表达式.像一些库的源码,喜欢用如下方式代替: ~function(){ // 代码... }(); 或者…
解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明.// 下面2个括弧()都会立即执行(function () { /* code */ } ()); // 推荐使用这个(function () { /* code */ })(); // 但是这个也是可以用的// 由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的// 所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了var i =…
首先这是js的一种函数调用写法,叫立即执行函数表达式(IIFE,即immediately-invoked function expression).顾名思义IIFE可以让你的函数立即得到执行(废话). 一般来说,IIFE有以下几种用途: 1. 创建只使用一次的函数,并立即执行它. 2. 创建闭包,保存状态,隔离作用域. 3. 作为独立模块存在(例子如jQuery),防止命名冲突,命名空间注入(模块解耦). 1. 创建只使用一次的函数,并立即执行它 创建只使用一次的函数比较好理解,在需要调用函数的…
[转]Javascript中的自执行函数表达式 本文转载自:http://www.ghugo.com/javascript-auto-run-function/ 以下是正文: Posted on 2014年6月11日 by admin | 1 Reply 在写插件或我们日常代码中,经常都会用到自执行函数表达式,最简单,最常用的也就是匿名函数自运行了.如下代码结构: 1 (function(){ 2 //code 3 })() 网上看到一篇关于这方面的文章,讲得蛮详细,特转载到博客记录一下. 转载…
一 什么是立即执行函数表达式 立即执行函数表达式,其实也可以叫初始化函数表达式,英文名:IIFE,immediately-inovked-function expression.立即执行函数表达式就是在定义的时候就立即执行. 二 立即执行函数表达式的写法 1)写法一 (function (a) { console.log('The result is ' + a); })(5); // The result is 5 2)写法二 (function (a) { console.log('The…
摘要: 理解JS的执行顺序. 作者:前端小智 原文:详解JavaScript的任务.微任务.队列以及代码执行顺序 思考下面 JavaScript 代码: console.log("script start"); setTimeout(function() { console.log("setTimeout"); }, 0); Promise.resolve() .then(function() { console.log("promise1");…
什么是IIFE IIFE就是立即执行函数表达式(Immediately-Invoked Function Expression) 为什么需要IIFE 应用IIFE有两个比较经典的使用场景, 第一就是在循环中定时输出数据项, for(var i=0;i<5;i++){ setTimeout(function(){ console.log(i); },1000); } 上面输出的并不是0,1,2,3,4而是5,5,5,5,5 for(var i=0;i<5;i++){ (function(i){…
上文<详解Javascript的继承实现>介绍了一个通用的继承库,基于该库,可以快速构建带继承关系和静态成员的javascript类,好使用也好理解,额外的好处是,如果所有类都用这种库来构建,还能使代码在整体上保持一致的风格,便于其它同事阅读和理解.在写完该文之后,这两天时不时都在思考这个库可能存在的问题,加上这两天又在温习<JavaScript面向对象编程指南>这本书继承这一章的内容,发现对继承的内容有了一些新的发现和理解,有必要再把这两天的收获再分享出来. 1. 继承库的注意事…