我创建了一个返回对象的简单模块。由于我在这里使用闭包,因此为什么使用此代码未定义变量jow =:

var test = (function(){

    var jow = "x";

    return {

        returnJow:function(jow){alert("the return = " + jow)}

    }



})();

test.returnJow();


如果我删除returnJow方法上的jow参数,我会得到“ return = x”。

最佳答案

直接回答您的问题:是的。

(“如果我在returnJow方法上删除了jow参数,我会得到“ return = x”。”)

var test = (function(){
    var jow = "x";
    return {
        returnJow:function(jow){alert("the return = " + jow)}
    }
})();

test.returnJow(); //"the return = undefined"


现在,让我们从测试闭包中使用jow

var test = (function(){
    var jow = "x";
    return {
        returnJow:function(){alert("the return = " + jow)}
    }
})();

test.returnJow(); //"the return = x"


或者,我们可以将jow传递给该函数...

var test = (function(){
    var jow = "x";
    return {
        returnJow:function(jow){alert("the return = " + jow)}
    }
})();

test.returnJow("x"); //"the return = x"


或者,更好的是..如果我们不将任何东西传递给returnJow(),我们可以在闭包中使用jow。

var test = (function(){
    var jow = "x";
    return {
        returnJow:function(new_jow){
            var jow = new_jow !== undefined ? new_jow : jow;
            alert("the return = " + jow);
        }
    }
})();

test.returnJow(); //"the return = x"
test.returnJow("hello"); //"the return = hello"


错过一关:

我们也可以将test声明为对象文字,因为我们没有将任何信息传递给闭包:

var test = {
    jow: "x",
    returnJow: function(new_jow) {
            var jow = new_jow !== undefined ? new_jow : this.jow;
            alert("the return = " + jow);
        }
};

test.returnJow(); //"the return = x"


有帮助吗?

07-28 11:53