请原谅我一个非常标准的问题,一切正常,但仍然很奇怪
在网页上,我使用了来自here的日期选择器
这是部分代码:
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();
}
}
});
...
}
'mode'不是全局变量,在控制台中显示为'undefined'
当我调用“insert_datepicker(2)”时,onChange工作正常,但触发事件时不应该出错?
该功能如何“记住”该笔记?
答案 0 :(得分:1)
由于closure nature的javascript,它允许内部函数访问外部作用域中声明的变量。
在你的情况下,mode
变量在insert_datepicker
函数内声明,你有onChange
的匿名内部函数,这里内部函数可以访问{{1}内声明的变量1}}作为闭包变量。
答案 1 :(得分:0)
mode
时会提供 insert_datepicker()
。在您的情况下mode
,在调用insert_datepicker(2)
时实际上是2
。以这种方式附加的所有日期选择工具都会在调用mode
时将mode
绑定到insert_datepickers
。
如果您未传递mode
,则会undefined
。将其与1
和2
进行比较将产生false
,并且不会执行语句的块。