javascript--立即执行函数

  当函数被包含在一堆括号()内部就称为了一个表达式,通过在末尾上加上另一个()可以立即执行这个函数,这样的表达式就叫做立即执行函数表达式(Immediately Invoked Function Expression,简称IIFE),如:(function(){...})()或者(function(){...}())

  IIFE的另一个非常普遍用法就是在外层括号传入参数进去,给内部的匿名韩式调用,来看下代码吧:

var a = 2;
    (function(global){
        var a = 3;
        console.log(a);             //3
        console.log(global.a);      //2
    })(window)

  可以看到将window作为参数传入内部函数中,内部函数通过global.a访问到全局变量a

  

  javascript支持函数式编程的,函数也可以作为对象传来传去,来看一段代码:

(function IIFE(def){
        def(window);
    })(function def(global){
        var a = 3;
        console.log(a);             //3
        console.log(global.a);      //2
    });

  

  再来看看立即执行函数和闭包应用的一个经典例子:

for(var i=0;i<5;i++){
        setTimeout(function(){
            console.log(i);
        },100)
    }

  这段代码看起来是循环5次,间隔100ms打印出0,1,2,3,4,但实际上只会输出五次5,因为定时器是异步事件,异步事件只能在同步事件执行完后才能执行,也就是说定时器的回调在for循环完才执行,这里需要使用IIFE声明并立即执行函数来创建作用域,修改一下代码:

for(var i=0;i<5;i++){
        (function(i){
            setTimeout(function(){
                console.log(i);
            },100)
        })(i);
    }

  在迭代里面使用IIFE会为每个迭代都生成一个新的作用域,使得延迟函数的回调可以将新的作用域封闭在每个迭代里,每个迭代都会含有依着正确的值给我们访问,记得实习第一天,老大给我出了个题,用原生js给5个li绑定点击事件,点击li弹出当前li的index,也是用这样的方法解决的。

  

时间: 2024-12-26 19:35:27

javascript--立即执行函数的相关文章

javascript立即执行函数

javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.  ( function(){…} )()  和  ( function (){…} () )  是两种javascript立即执行函数的常见写法; 最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的; 后来发现加括号的原因并非如此.要理解立即执行函数,需要先理解一

javascript立即执行函数 (function(){})()

看到一段代码: (function(){ var outer = $('#subject'); outer.find('li').on('mouseover', mouseover); })() ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,且这个函数必须是函数表达式,不能是函数声明. 这样写的作用: javascript中没用私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中声明了一些变量,可能

javascript立即执行函数表达式(IIFE)

常用的两种写法: (function(){ /* code */ }()); (推荐写法) (function(){ /* code */ })(); Q:为什么这样写,函数就嗯那个立即执行? A:因为在javascript里,括号内部不能包含语句,当解析器对代码进行解释的时候,先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明. eg:如下代码就会报错. function(){ /* code */ }(); // SyntaxError: Un

Javascript 自动执行函数(立即调用函数)

开头:各种原因总结一下javascript中的自动执行函数(立即调用函数)的一些方法,正文如下 在Javascript中,任何function在执行的时候都会创建一个执行上下文,因为function声明变量和function有可能只在该function内部,这个上下文,在调用function的时候,提供一些简单的方式来创建自由变量或私有子function. eg: // 由于该function里返回了另外一个function,其中这个function可以访问自由变量i // 所有说,这个内部的f

[JavaScript]自执行函数

最近在接触mui的时候,遇到了一段代码: 1 (function($, doc) { 2 $.init({ 3 statusBarBackground: '#f7f7f7' 4 }); 5 $.plusReady(function() { 6 plus.screen.lockOrientation("portrait-primary"); 7 var settings = app.getSettings(); 8 var state = app.getState(); 9 var ma

Javascript自执行函数 (Immediately-Invoked Function Expression)

1. Javascript编译器在遇到function这个关键字时,默认认为它是function声明,而不是表达式. 2. 在已声明的function后面加括号,即可调用它.比如, function foo(){console.log('hello javascript.')} foo(); 3. 括号里面允许javascript表达式,(function(){console.log('hello javascript')}), 这样这个匿名函数就是一个表达式,而不是function的声明.根据

javascript自执行函数常见写法

代码: var obj = (function(a,b){ a.prop = b return a }(this,'hello')) 测试: console.log(obj.prop) 输出: hello [Finished in 0.4s] 原文地址:http://blog.51cto.com/12173069/2293788

javascript中的立即执行函数(function(){…})()

javascript中的立即执行函数(function(){…})() 深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){…})()包住业务代码,使用jquery时比较常见. ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此.要

深入理解javascript中的立即执行函数(function(){…})()

这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){-})()包住业务代码,使用jquery时比较常见,需要的朋友可以参考下http://www.jb51.net/article/50967.htm javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( function()

【转】深入理解javascript中的立即执行函数(function(){…})()

javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此.要理解立即执行函数,需要先理解一些函数的基本概念.