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

查看:119
本文介绍了javascript - 立即调用的函数表达式的用法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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)匿名函数声明的变量怎样才能被销毁?在什么时候才会被销毁?

解决方案

具体应该说是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。

这篇关于javascript - 立即调用的函数表达式的用法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆