首页 > 立即调用的函数表达式的用法

立即调用的函数表达式的用法

function createFunctions(){

    var result=new Array();
    for(var i=0;i<10;i++){
        result[i]= function(){
            return i;
            }();   
    }
    return result;
}
var arr=createFunctions();
alert(arr);//[0,1,2,……,9]

我想立即调用匿名函数来给result[index]赋值,网上查阅其中有几种方法是:

  1. !function(){ // do something }();

  2. ~function() {}();

  3. +function() {}();

  4. -function() {}()

有人说function(){return i; }();会提示语法错误
实际情况是function(){return i; }();并没有提示错误。而function前面添加+-!~会改变匿名函数返回值
(1)请问可以使用function(){return i; }()的格式来完成立即调用吗??
(2)如果匿名函数不是立即执行的,那么它会在什么时刻被执行??
(3)匿名函数声明的变量怎样才能被销毁?在什么时候才会被销毁?


单独调用

function(){return 1; }();
// VM263:2 Uncaught SyntaxError: Unexpected token (

是会报错的

一般可以通过把匿名函数变成立即调用的函数表达式,例如

var f = function() {}();
+function(){ return 1; }()
(function(){ return 1; })()
...

显然,你已经把匿名函数转成立即调用的函数表达式了。

具体参考: http://www.zhihu.com/question/20249179


;(function({
//do

}))();


具体应该说是result= function(){//dosomething}();不会有语法错误吧,function(){//dosomething}();单独执行还是有语法错误的。

result=
  1. function(){//dosomething}();
    2.!function(){ // do something }();
    3.~ function() {}();
    4.+ function() {}();
    5.- function() {}()

原理是语句function(){//dosomething}()都被当作表达式处理了(赋值前计算表达式的值),就是2、3、4、5例可以自执行,自执行的原因也是function(){//dosomething}()由于前面的符号被当作表达式处理了。
至于result= function(){//dosomething}();不会有语法错误就是因为赋值语句把右边的function(){//dosomething}()当作表达式处理了,然后将结果赋给result。

【热门文章】
【热门文章】