立即执行函数

立即执行函数

针对初始化功能的函数,函数执行完成随即释放空间

立即执行函数的两种写法

(function(){}());//建议使用第一种
(function(){})();
//立即执行函数一般为匿名函数
(function (){
  var a = 123;
  var b = 232;
    console.log(a+b);//355
}())
//当我们给函数命名,再在外部调用这个函数
(function abc(){
  var a = 123;
  var b = 232;
    console.log(a+b);//355
}())
abc()//is not defined
//说明函数自执行之后立即被释放
//立即执行函数可以用一个变量来接返回值
var num = (function(a,b,c){
    var d = a*b+c;
    return d;
}(2,3,4))
console.log(num);
//函数声明
function test(){
    var a = 123;
}//() 直接加括号会有语法错误
test();//只有表达式才能够被执行符号执行

//函数表达式
var test1 = function(){
    console.log('a')
}()

+ function text(){
    console.log('a')
}();   //加上+正  -负(* /不行)也可以加上逻辑运算符 变成 ___ &&/||/! function text(){   }
//会变成立即执行函数
//text 不再是一个函数,text is not defined

只有表达式才能够被执行符号()执行,能被执行符号执行的表达式,函数的名字会被自动忽略

function test(a,b,c,d){
    console.log(a+b+c+d);
}(1,2,3,4);
//在系统识别中,他不会识别成立即执行符号();会变成如下这种形式,虽然不报错,但也不执行
function test(a,b,c,d){
    console.log(a+b+c+d);
}//js语句分隔可以不写;

(1,2,3,4);

以下是容易出错的代码

function text() {
    var arr = [];
    //通过for循环,将数组中每一位都填充为函数,再返回数组
    for (var i = 0; i < 10; i++) {
        arr[i] = function () {
        // arr[i]中的i一直在变,但函数体并不会立即执行,i只是被引用
        //当外部引用时,才会调取i进行打印,此时for循环已执行完成,变成了10,所以之后打印10输出了10次
            document.write(i + " ");
        }
    }
    return arr;
}
var myArr = text();
for(var j=0;j<10;j++){
    myArr[j]();//10打印了10次,此时才会执行函数体内的内容
}

解决方法

function text() {
    var arr = [];
    for (var i = 0; i < 10; i++) {
        (function (j) {//立即执行函数
            //形成闭包,相当于定义了一个j在里面,下面的函数直接获取到j的值,直接把下面的语句甩到数组里面
            arr[j] = function () {
                document.write(j + " ");
            }
        }(i)); 
    }
    return arr;
}
var myArr = text();
for(var j=0;j<10;j++){
    myArr[j](); 
}
posted @   澄空飞鸟  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示