Javascript IFFE与返回函数的函数

Javascript IFFE与返回函数的函数,javascript,Javascript,考虑以下几点: var x = (function(){ var _private = 'start'; var _x = function(text){ if(text){ _private = text; } else{ return _private; } } return _x; })(); console.log(x()); //start

考虑以下几点:

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函数的行为不同,我没有得到关于iff的什么总体概念

小提琴:在第一个例子中:

var x = (function(){
    var _private = 'start';
    var _x = function(text){
        if(text){
            _private = text;
        }
        else{
            return _private;
        }
    }
    return _x;
})();
var x是自调用外部函数以来的内部函数

在第二个示例中,var y是如下调用后的外部函数:

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

那么p将正好是上面的var x。

啊,这现在是有意义的。我没有想过需要将y赋给一个变量,然后该变量将执行我想要的操作+1.