我有以下功能:
function initPaymentBlock(bIdx) {
var paymentType = 'default';
if( $('#gc-apply-btn-'+bIdx).length ) {
$('#gc-apply-btn-'+bIdx).click( function() {
poApplyGiftCard(bIdx);
console.log("about to change payment type");
paymentType = 'credit card';
console.log("paymentType inside function: " + paymentType);
});
}
console.log("payment type: " + paymentType);
poGetPaymentOption(paymentType, 0, bIdx);
}
paymentType
变量设置为'默认'在初始声明中。在内部点击功能中,它已更改为信用卡'。当我在内部函数中运行console.log
语句时,它返回credit card
。内部功能之外的console.log
(在poGetPaymentOption
通话之前)返回'默认'。
我知道问题是变量的范围,但无法弄清楚我可以设置它的方式或位置,以便poGetPaymentOption
函数调用获得正确的值('默认&# 39;如果按钮在运行之前没有被点击;'信用卡'如果点击按钮。)有人可以帮助我吗?
答案 0 :(得分:1)
非常明显。单击会更改值,但仅在单击后更改。您的第二个控制台日志在触发单击事件之前运行。这有什么问题?
function initPaymentBlock(bIdx) {
var paymentType = 'default';
if( $('#gc-apply-btn-'+bIdx).length ) {
$('#gc-apply-btn-'+bIdx).click( function() {
poApplyGiftCard(bIdx);
console.log("about to change payment type");
paymentType = 'credit card';
console.log("paymentType inside function: " + paymentType);
poGetPaymentOption(paymentType, 0, bIdx);
});
}
}
答案 1 :(得分:1)
范围没有问题。这都是关于执行的顺序。
以下是代码的执行方式:
以下是运行initPaymentBlock()
时预期的控制台输出:
就是这样。现在,当您单击该按钮时,将显示以下输出: