JavaScript对象奇怪的行为

JavaScript对象奇怪的行为,javascript,jquery,datepicker,Javascript,Jquery,Datepicker,请原谅我提出一个非标准问题,一切正常,但仍然很奇怪 在网页上,我使用来自的日期选择器 以下是部分代码: HTML: “mode”不是全局变量,在控制台中显示为“undefined”。 当我调用“insert_datepicker(2)”时,onChange工作正常,但触发事件时不应该出现错误吗? 函数如何“记住”便笺?模式在调用insert\u datepicker()时提供模式在您的情况下,调用插入日期选择器(2)实际上是2。所有以这种方式连接的日期选择器都将其模式绑定到调用insert\u日

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

“mode”不是全局变量,在控制台中显示为“undefined”。
当我调用“insert_datepicker(2)”时,onChange工作正常,但触发事件时不应该出现错误吗?

函数如何“记住”便笺?

模式
在调用
insert\u datepicker()
时提供<代码>模式在您的情况下,调用
插入日期选择器(2)
实际上是
2
。所有以这种方式连接的日期选择器都将其
模式
绑定到调用
insert\u日期选择器时传入的
模式

当您未在
模式下通过时,它将是
未定义的
。将其与
1
2
进行比较将产生
false
,并且不会执行语句块。

这是因为,它允许内部函数访问外部范围中声明的变量


在您的情况下,
mode
变量在
insert\u datepicker
函数中声明,并且您有一个用于
onChange
的匿名内部函数,在这里,内部函数可以访问
insert\u datepicker
中声明为闭包变量的变量。

为什么会有错误?这是一个JavaScript闭包。看见
<div id="datepicker-calendar"></div>
function insert_datepicker(mode)
{
    $('#datepicker-calendar').empty();  
    ...
    $('#datepicker-calendar').DatePicker({
        ...
        onChange    : function(date,el) {  
            if (mode == 1){
                doSmth1();
            }
            if (mode == 2){
                doSmth2();
            }
        }  
    });
    ...
}