IFFE与返回函数的函数

IFFE vs. function that returns a function

本文关键字:函数 返回 IFFE      更新时间:2023-09-26

考虑以下内容:

var x = (function(){
    var _private = 'start';
    var _x = function(text){
        if(text){
            _private = text;
        }
        else{
            return _private;
        }
    }
    return _x;
})();
console.log(x()); //start
x('end');
console.log(x()); //end
var y = function(){
    var _private = 'start';
    var _y = function(text){
        if(text){
            _private = text;
        }
        else{
            return _private;
        }
    }
    return _y;
}
console.log(y()); //toString of function
y();//invoked function, should return _y?
y('end')
console.log(y()); //toString of function

我需要弄清楚为什么y函数在被调用后的行为与x函数不同。为什么y功能表现不同,我没有得到关于IFFE的什么总体概念?

小提琴:http://jsfiddle.net/xmmddcgn/

在第一个示例中:

var x = (function(){
    var _private = 'start';
    var _x = function(text){
        if(text){
            _private = text;
        }
        else{
            return _private;
        }
    }
    return _x;
})();

var x内部function,因为外部function被调用。

在第二个示例中,var y是外部function,在您这样调用它之后:

var y = function () {
    var _private = 'start';
    var _y = function (text) {
        if (text) {
             _private = text;
        } else {
             return _private;
        }
    }
        return _y;
 }
y(); // nothing happens and nobody keep _y's ref.
var p = y(); //p is _y
console.log(p()); //start
p('end')
console.log(p()); //end

那么CCD_ 9将恰好是上面的CCD_。