javascript - 立即调用的函数表达式的用法
巴扎黑
巴扎黑 2017-04-10 18:11:30
[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)匿名函数声明的变量怎样才能被销毁?在什么时候才会被销毁?

巴扎黑
巴扎黑

全部回复(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。

ringa_lee

单独调用

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

}))();

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号