0

请原谅我提出一个不标准的问题,一切正常,但仍然很奇怪
在网页上我使用此处
的日期选择器 这是部分代码:
HTML:

<div id="datepicker-calendar"></div>

DatePicker 插入函数:

function insert_datepicker(mode)
{
    $('#datepicker-calendar').empty();  
    ...
    $('#datepicker-calendar').DatePicker({
        ...
        onChange    : function(date,el) {  
            if (mode == 1){
                doSmth1();
            }
            if (mode == 2){
                doSmth2();
            }
        }  
    });
    ...
}

“模式”不是全局变量,在控制台中显示为“未定义”。
当我调用“insert_datepicker(2)”时,onChange 工作正常,但触发事件时不应该出现错误吗?
该功能如何“记住”音符?

4

2 回答 2

1

这是由于javascript的闭包性质,它允许内部函数访问在外部范围中声明的变量。

在您的情况下,mode变量是在函数内部声明的,insert_datepicker并且您有一个匿名内部函数onChange,这里内部函数将可以访问内部声明insert_datepicker为闭包变量的变量。

于 2013-06-11T09:11:22.400 回答
0

mode调用时提供insert_datepicker()mode在您的情况下,调用时insert_datepicker(2)实际上是2. 以这种方式附加的所有日期选择器在调用时都会mode绑定到mode传入的insert_datepickers

当你不通过时mode,它会是undefined1将其与and进行比较2将产生false并且不会执行语句块。

于 2013-06-11T09:11:04.317 回答