我有一个JS模块,我想为局部变量设置一个值。我以为我可以使用“this”使用相同的名称:
JS
(function() {
var amount = 0;
var setAmount = function(amount) {
this.amount = amount;
}
........
})();
答案 0 :(得分:2)
amount
属于该函数的范围,因此您不需要this
关键字。
(function(){
var amount = 0;
var setAmount = function( newAmount ){
amount = newAmount;
}
})();
答案 1 :(得分:1)
var amount = 0, setAmount = function(myAmount) {
myAmount = amount;
};
答案 2 :(得分:0)
你正在使用自我执行的匿名功能,因为这不是一个对象,而是这个"#34;在你的情况下,你只需:
(function(){
var amount = 0;
var setAmount = function( pamount ){
amount = pamount;
}
........
})();
答案 3 :(得分:0)
this
的工作方式
var x = {
amount : 0,
setAmount : function(){
alert(this.amount);
}
}
x.setAmount(); //alert 0
答案 4 :(得分:0)
想象一下两个盒子,一个是大盒子,一个是小盒子。小盒子在较大的盒子里面。
小方框代表您定义的setAmount
功能。大框表示包装该setAmount函数的闭包。
每个框只知道自身内部是什么以及它的父外框内部是什么。
关键字this
,表示此框中的 。
小方框已经可以看到amount
,因为它位于较大的方框中。如果您在小方框内定义this.amount = something
,则与var amount = something
的内容基本相同。
您还需要小心使用参数名称,因为如果您不小心,这只会导致头痛。
您遇到的问题是一个范围问题,如果您必须以这种方式命名变量 - 这是一个解决方案。
(function() {
var amount = 0;
var scope = this;
var setAmount = function(amount) {
scope.amount = amount;
}
........
})();
这样做是在更大的框中创建一个变量,该变量引用回其范围(在我们的示例中回到它自己的框中)。因为小盒子在大盒子里面,所以它可以看到范围变量。