zoukankan      html  css  js  c++  java
  • Javascript 立即执行函数

    http://weizhifeng.net/immediately-invoked-function-expression.html

    var f1 = function() {
        var res = [];
        var fun = null;
        for(var i = 0; i < 10; i++) {
            fun = function() { console.log(i);};//产生闭包
            res.push(fun);
        }
    
        return res;
    }

    var res = f1();
    for(var i = 0; i < res.length; i++) {
        res[i]();
    }

    以上会输出十个10,原因分析如下:

    闭包产生,内部函数引用外部函数的变量,并且这个变量所占的内存是不会释放的,就会导致这个i的值是10,

    因此内部函数在执行的时候,会输出十个10。

    解决这个问题的方式为立即执行函数:

    var f1 = function() {
        var res = [];
        var fun = null;
        for(var i = 0; i < 10; i++) {
            (function(index) {
                fun = function() {console.log(index);};
                res.push(fun);
            })(i);
    }
        return res;
    }

    在JavaScript的OOP中,我们可以通过IIFE来实现,如下:

    var counter = (function(){
        var i = 0; 
        return {
            get: function(){
                return i;
            },
            set: function( val ){
                i = val;
            },
            increment: function() {
                return ++i;
            }
        };
    }());
    
    counter.get(); // 0
    counter.set( 3 );
    counter.increment(); // 4
    counter.increment(); // 5
  • 相关阅读:
    JSP内置/隐式对象(9个)
    会话技术——Cookie&Session
    Head First Java——读书笔记(一)
    并发和并行
    HotSpot
    域对象的比较
    书籍——Java
    润乾报表基础知识
    Android引导页过多导致OOM内存泄漏
    AngularJS 之1-初识
  • 原文地址:https://www.cnblogs.com/voctrals/p/3713882.html
Copyright © 2011-2022 走看看