我有这个功能
$scope.updateValue = function(key, selectedProductname, numberUsed){
var selectedKey = key;
var selectedProductname = selectedProductname;
var numberUsed = numberUsed;
var useageRef = ref.child('/useage/');
var updateObj = $firebase(useageRef);
var myData = {
productName : selectedProductname,
numberUsed : numberUsed
}
var decrementLocation = inventoryRef.child(key + '/amount')
updateObj.$push(myData).then(
decrementLocation.transaction(function (current_value, numberUsed) {
console.log(numberUsed);
return (current_value || 0) - 1;
})
);
}
我通过" numberUsed"进入$ scope.updateValue并在myData中使用它,然后将其推送到服务器并且没有问题,但是当我在此行使用它时##; decrementLocation.transaction(function(current_value,numberUsed){&#34} ;然后我尝试console.log(numberUsed);控制台说未定义。为什么?我怎么能在这一行中使用numberUsed" decrementLocation.transaction(function(current_value,numberUsed){"?how成功编码?
答案 0 :(得分:1)
这里有很多事情要发生。
首先,在以下代码中:
decrementLocation.transaction(function (current_value, numberUsed) {
console.log(numberUsed);
return (current_value || 0) - 1;
})
您正在重新声明numberUsed
作为.transaction()
回调函数的第二个参数。因此,无论numberUsed
在这个小函数之外是什么无关紧要。如果要使用周围函数中的var,则需要执行以下操作:
decrementLocation.transaction(function (current_value) {
console.log(numberUsed);
return (current_value || 0) - 1;
})
其次,;
功能没有关闭.transaction()
。我不认为这会对你在这里的经营产生重大影响,但不能确定。这应该通过jslint / jshint运行。
第三,您要在整个周围numberUsed
函数中重新声明$scope.updateValue()
。
$scope.updateValue = function(key, selectedProductname, numberUsed){
var numberUsed = numberUsed;
因此,您要声明一个新变量numberUsed
,其值为numberUsed
,但它是一个新变量,因此应设置为undefined
。如果它被设置为任何东西,那将是令人惊讶的。如果你需要var,那么你应该这样做:
$scope.updateValue = function(key, selectedProductname, numberUsed){
var nu2 = numberUsed;
或类似的东西。但即便如此,为什么还要重新调整var?无论如何它都是按值复制的。
一个好的linter会抓住任何这个。