var i = 1;
通过闭包传入传参i 后我发现传入后不能作数字用了,通过log打印发现,i被传入后变成了对象(图2)
这是为什么呢?如何解决?求大神指点迷津
补图,完整图 如下
通过循环数,传入到最后的闭包中,这个时候打印i 就变成了对象,怎么回事?
var i = 1;
通过闭包传入传参i 后我发现传入后不能作数字用了,通过log打印发现,i被传入后变成了对象(图2)
这是为什么呢?如何解决?求大神指点迷津
补图,完整图 如下
通过循环数,传入到最后的闭包中,这个时候打印i 就变成了对象,怎么回事?
建议你把问题代码贴全一点...return function(i) {}
, 其中的 i 和你闭包传入的 i 是没有任何关系的,renturn 以后的参数是作为下一次调用传入的。
function test(i) {
console.log('i is:' + i);
return function(i) {
console.log('i is:' + i);
}
}
var fun = test(1); // i is:1
fun(2);// i is:2
你这里第一个参数本身就是event没毛病.
$(".box-btn").on("mouseover", function(){
var index = $(this).index(".box-btn");
//...
}).on("mouseout", function(){
var index = $(this).index(".box-btn");
$(".header_container").addClass("header_container_black_light").removeClass("header_container_" + color_list[index] + "_light");
$(".footer_container").addClass("header_container_black_light").removeClass("header_container_" + color_list[index] + "_light");
});
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答918 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
需要注意的是,形参是种定义,也就是说,这里在两个函数里分别定义了名为
i
的参数,这是两个不同的参数定义。由于定义的就近原则,里面这个函数内部只能访问内部函数参数中定义的i
。看下面的代码也就是说在内部函数中的
i
实际是由f(20)
传入的20
。如果想使用外部函数中的参数怎么办?改个名字!改了名字让两个参数名称不一样,那么就不会出现内部函数的参数定义隐藏了外部函数参数定义的问题了。顺便说一下,在注册事件处理函数的时候,这个处理函数是在事件发生时由事件机制调用的,参数并不能由你控制。这里使用闭包,主要目的应该是传一个固定的参数值进去(限制作用域,或代替全局变量),而你遇到的问题在于内部参数定义与外部参数定义同名,所以把外部参数定义隐藏掉了。