今天做东西的时候遇到的问题
for(var k=0; k<piclength; k++){
picList[k].onmouseover = function() {
picMovement('ifocus_piclist',0,-225*k,5);
classNormal('ifocus_btn','ifocus_tx');
classCurrent('ifocus_btn','ifocus_tx',k);
}
}
发现传过去的k始终等于piclength,而不是for循环的k!
问题纠结了很久,各种alert调试,发现内部函数中的k是一个定值,等于piclength,为什么出现这种情况了?上网查了一下
http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html看到了此文,发现了我要的答案:
闭包允许内层函数引用父函数中的变量,但是该变量是最终值,究其原因,还得回到回调函数上
解决的问题在连接中也有了,我这也提供一种方法
for(var k=0; k<piclength; k++){
picList[k].index = k;
picList[k].onmouseover = function() {
picMovement('ifocus_piclist',0,-225*this.index,5); //不能直接传k
classNormal('ifocus_btn','ifocus_tx');
classCurrent('ifocus_btn','ifocus_tx',this.index);
}
}
问题就解决了!
分享到:
相关推荐
3. 外层函数必须返回内层函数本身,而不是仅仅调用它。 闭包函数的好处主要体现在以下几个方面: - 封装性:闭包提供了一种封装变量的方式。通过闭包可以隐藏一些状态,只暴露有限的接口。 - 数据持久化:由于闭包...
# 外层函数负责分割作用域,内层函数才是闭包提供的功能。 外层函数返回内层函数的引用,供外部使用。 def my_line(k, b): # k,b只在my_line函数以及create_y函数内部有效,在外部无效。 比用全局变量节省资源。 ...
简单来说,闭包就是在一个函数内部定义另一个函数,内层函数可以引用外层函数的变量。由于JavaScript中只有函数内部的子函数才能读取局部变量,因此闭包可以被看作是“定义在一个函数内部的函数”。 闭包的作用之一...
我们可以使用闭包将变量i传递给内层函数,然后在onclick事件中使用该局部变量。 5、加一层闭包,返回一个函数作为响应函数 我们可以使用闭包将变量i传递给内层函数,然后返回一个函数作为响应函数。 6、用Function...
闭包允许函数访问和操作其外部作用域中的变量,即使在其外部作用域已经结束之后。这种特性使得闭包在JavaScript中扮演着核心角色,尤其在数据封装、模块化和内存管理等方面。 1. **变量作用域的理解** - 全局变量...
闭包涉及到的是嵌套作用域,其中内层函数可以访问外层函数的局部变量,即使外层函数已经执行完毕。 3. **闭包的形成条件**:闭包的形成需要满足三个条件: - 内部函数嵌套在外部函数中。 - 内部函数引用了外部...
5. 当在一个函数内部的内层函数中同时使用`global`和`nonlocal`声明同一个变量时,Python会抛出语法错误,因为无法确定变量到底应该属于哪个作用域。 理解闭包的关键在于掌握函数的作用域和变量的生命周期。在编写...
闭包本质上是函数能够记住并访问其词法作用域内的变量,即使该函数已经执行完毕且其外部作用域不再存在。这种特性使得闭包成为JavaScript中实现数据封装和私有变量的关键工具。 首先,闭包是由于JavaScript的函数...
然而,对于闭包来说,只要闭包函数还被引用,即使外部函数已经执行完毕,其作用域中的变量也不会被垃圾回收器清除,因为这些变量仍然被闭包函数所引用。 #### 作用域的历史 在早期版本的JavaScript中,作用域的概念...
Python 的变量名解析机制也称为 LEGB 法则,具体如下:当在函数中使用未确定的变量名时,Python 搜索四个作用域:本地作用域(L),之后是上一层嵌套结构中 def 或 lambda 的本地作用域(E),之后是全局作用域(G)...
nonlocal使用闭包,就是内层函数引用了外层函数的局部变量。如果只是读取外层变量的值,我们会发现返回的闭包函数调用一切正常: def inc(): x = 0 def fn(): # 仅读取x的值: return x + 1 return fn f = inc...
当在一个函数内部定义另一个函数时,内层函数可以访问外层函数的变量,即使外层函数已经执行完毕,这就是闭包的基础。 闭包的本质是一个函数,这个函数能够记住它被创建时的作用域,即使该作用域在其完成后仍然存在...
2. **闭包**:如果内层函数引用了外层函数的局部变量,即使外层函数已经执行完毕,内层函数仍然可以记住这些变量的值,形成闭包。这对于处理字典中的某些数据转换或过滤操作很有用。 3. **递归计算**:在处理具有...
简单地说,闭包也就是内层函数可以引用存在于包围它的函数内的变量及该函数的参数,即使外层函数的执行已经终止。这个特性非常强大和复杂。 JavaScript 闭包函数使用的场景主要有以下 3 点: 1. 保护函数的变量...
闭包(Closure)是 Python 中的一种特殊的函数对象,它可以记忆外部函数的变量环境。闭包可以捕获外部函数的变量,并在后续调用时使用这些变量。闭包是 Python 中实现最内嵌套作用域规则的实现方案。 Python 中的...
闭包是当内层函数引用了外部函数的局部变量,并且该外部函数已经执行完毕但其作用域内的变量仍然存在时形成的。闭包通常用于实现数据隐藏和状态保持。例如: ```python def counter(): count = 0 def increment()...
在闭包中,这些引用名称与内层函数虽然存在,但是它们可能不是“可见”的。 例如,在一个闭包相关的示例代码中: ```python def count(): fs = [] for i in range(1, 4): def f(): return j*j fs.append(f) ...
- 定义:当一个变量在函数内部声明时,该变量仅在该函数内有效,这就是局部作用域。 - 特性: - 函数内部声明的变量不会污染全局命名空间。 - 如果函数内部声明的变量与全局变量同名,局部变量会覆盖全局变量。 ...
闭包的主要特点是可以在一个内层函数中访问到其外层函数的作用域。 一、闭包的定义 闭包是指一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起。这样的组合就是闭包(closure)。也就是说...