我创建了一个返回对象的简单模块。由于我在这里使用闭包,因此为什么使用此代码未定义变量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"
有帮助吗?