JavaScript中”立即调用的函数表达式“ -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

    在学习JavaScript的时候,经常会看到“自动立即执行的函数代码”,

JavaScript中”立即调用的函数表达式“

    说的通俗点就是:定义一个函数,然后立即调用它。

    我们知道调用一个函数的方式是在函数名称后面添加一对圆括号。

    例如:

var myFunction = function(){//code};//立即执行上面定义的函数myFunction();

    上面的例子中,我们创建了一个匿名函数并把它赋值给一个变量myFunction。调用时该函数时,我们在变量名后面加一对圆括号,即myFunction();

    因为在JavaScript中,变量只不过是值的一种表现形式,所以出现变量的地方也可以用值来替换。但当这个变量的值是一个匿名函数时,替换时就要注意。

    关键点:1.JavaScript将function关键字当做一个函数声明的开始,而函数声明后面是不能直接加圆括号的。

    2.JavaScript中,()圆括号里面是不能包含语句的。

    利用上述两点,我们可以用一对圆括号将一个匿名函数的声明括起来,这样解析器在解析到function关键字时,就会将这个函数声明转换成一个函数表达式。所以上面的例子也可以改写成下面这样:

(function(){//code})();

(function(){//code}());

    这个函数会自动立即执行。

    这种“立即执行函数”的一个作用:模仿块级作用域。

    JavaScript中是没有块级作用域的概念的。例如下面这个函数:

function output(count){    for(var i=0; i<count; pre="">我们用“立即执行函数”和闭包把上面的函数改写一下,就可以得到我们想要的效果,

电脑资料

JavaScript中”立即调用的函数表达式“》(http://meiwen.anslib.com)。</p>

    上面这个函数并没有按我们的预期,函数返回后,每个result[i]的值都是10,因为闭包引用的都是同一个外部函数中的i。要达到预期效果,我们可以如下改写;

   

function myFunction(){    var = result = new Array();    for(var i=0; i<10;i++){    result[i]= function(num){        return function(){        return num;        }    }(i);    }    return result;}
在这里,我们增加了一个立即执行的匿名函数,并把立即执行的结果赋值给result数组,这时result数组中的每个函数都有自己的一个num副本,并且num副本的值每次执行匿名函数时都是不同的。

最新文章