0

我有以下功能:

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函数调用获得正确的值(如果在运行之前未单击按钮,则为“默认”;“信用卡',如果单击按钮。)有人可以帮我吗?

4

2 回答 2

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);
        });
    }
}
于 2013-03-08T22:25:33.487 回答
1

范围没有问题。这都是关于执行顺序的。

以下是代码的执行方式:

  • 当您进入 initPaymentBlock 函数时,您将其设置为“默认”。
  • 然后您创建一个单击处理程序,将其值更改为“信用卡”,但仅在有人单击按钮之后。
  • 然后底部的控制台输出会输出当前值,该值仍然是“默认值”。
  • 现在,如果用户单击按钮,单击处理程序将执行并输出“信用卡”

这是您运行时的预期控制台输出initPaymentBlock()

  • 付款方式:默认

而已。现在,当您单击按钮时,将显示以下输出:

  • 即将更改付款方式
  • 函数内部的paymentType:信用卡
于 2013-03-08T22:25:56.257 回答