今天在做一个动态循环添加行,并在新行添加onclick事件,调用一个带参数的函数时,遇到一个问题,当行添加完成后,行上的onclick事件触发时,传入的参数总是循环里最后一行传过来的参数,现将错误的写法和正确的写法记录如下:
错误的写法:
var displaySelectResult = function(str) {
alert(str);
}
if ('' != search_result) {
for (var i = 0; i < search_result.length; i++) {
var newTR = search_table_results.insertRow();
var newTD = newTR.insertCell();
newTD.innerText = search_result[i];
newTD.attachEvent("onclick", function() {
displaySelectResult(newTD.innerText);
});
}
}
这种写法得到的结果是,添加的所有新行的onclick事件调用时,总是alert出来search_result[最后一个索引]的值,不能正确地把循环中的每一个索引相应的传给每次添加的行
正确的写法则应如下:
if ('' != search_result) {
for (var i = 0; i < search_result.length; i++) {
var newTR = search_table_results.insertRow();
var newTD = newTR.insertCell();
newTD.innerText = search_result[i];
newTD.onclick = function (str) {
return function() {
alert(str);
};
}(search_result[i]);
}
}
这就是javascript中相关的闭包的概念范围.
分享到:
相关推荐
本篇将详细探讨如何利用jQuery实现表格中checkbox的相关事件操作,包括动态添加行、隔行换色、选中变色、全选与反选等功能。 首先,让我们了解jQuery的基本概念。jQuery是一个快速、简洁的JavaScript库,它简化了...
本文介绍的使用JavaScript动态生成表格并为每个单元格添加单击事件的方法是Web开发中一项基础而重要的技能。通过这种方式,我们可以根据实时数据创建表格,并允许用户与表格中的数据进行交互。这不仅使页面变得更加...
- **调用函数**:通过上下文对象,可以查找并调用JavaScript中的函数,传入参数。 - **数据交换**:C++和JavaScript的数据类型不同,需要进行适当的转换。例如,C++的整型、浮点型需要转换为JavaScript的Number,...
在探讨如何利用JavaScript调用浏览器的打印模块实现点击按钮时触发自定义函数的过程中,我们首先需要了解浏览器提供的打印API以及如何通过编程方式触发打印任务。现代浏览器通常提供了window.print()方法,该方法...
本文将详细介绍在JavaScript中循环动态绑定带参数函数时可能遇到的问题,并提供解决方案。 首先,我们来看看不带参数的事件绑定方法,使用attachEvent方法,如下所示: ```javascript document.getElementById(...
在创建函数时,JavaScript引擎会为每个函数添加两个隐藏属性:一个是函数上下文(也称为调用者或this值),另一个是实现函数功能的代码。函数对象还有一个特别的属性prototype,它指向一个新的对象,这个对象的...
1. **立即调用的函数表达式 (IIFE)**:在每次循环中,创建一个IIFE,将当前循环变量作为参数传入。这样,每个IIFE都会有自己的作用域,其中的变量不会被其他函数共享。 ```javascript for (let i = 0; i ; i++) { ...
5. **函数式(Functional)**:JavaScript 支持函数式编程风格,允许将函数作为参数传递,也可以作为值返回。 **JavaScript函数查询CHM文件:** `JavaScript参考手册.chm` 是一个帮助文件,包含JavaScript的所有...
例如,`Array.prototype.map()`、`Array.prototype.filter()`和`Array.prototype.reduce()`都是JavaScript中的高阶函数,它们允许我们对数组进行操作,而无需显式地使用循环。 3. **闭包**:闭包是函数及其相关的...
这样,当调用函数时未传递该参数,其值就会自动设为默认值,简化了函数调用的逻辑。 ES6引入了模板字面量(Template literals),使用反引号(`)包围字符串,支持字符串插值,例如 `${expression}`。这使得创建...
在JavaScript中,由于其动态类型和第一类函数特性,使得函数式编程成为可能。下面将详细介绍一些核心的函数式编程概念和在JavaScript中的应用。 1. **第一类函数**:在JavaScript中,函数是一种值,可以被赋给变量...
然而,一个常见的问题是在尝试使用`setTimeout()`调用带参数的函数时,参数往往无法正确传递。这是因为`setTimeout()`默认只接受一个函数引用和一个延迟时间作为参数,而不直接支持传递额外的参数。这个问题可以通过...
这行代码时,JavaScript引擎会暂时离开for循环,跳到传递给eachMap方法的匿名函数中执行。需要注意的是,在这个匿名函数执行之前,变量attr是没有值的。 4. 从匿名函数返回后,attr的值已经被赋予了对象中的某个键...
这些函数可以被传递给其他函数,例如在高阶函数中,也可以作为其他函数的结果返回。这种能力使得JavaScript具备了函数式编程的基本特征。 其次,JavaScript支持词法作用域和闭包,这是函数式编程中重要的概念。闭包...
在IT领域,特别是前端开发中,JavaScript是一种广泛使用的编程语言,用于实现网页的动态功能。在给定的代码示例中,我们看到了一个利用JavaScript控制HTML表格增删行的实例,这在处理需要用户动态输入多条记录的场景...
包括变量声明(var关键字)、数据类型(如字符串、数字、布尔值、对象等)、控制流程(if...else语句、for循环、while循环)以及函数的定义与调用。理解这些基础概念是构建任何JavaScript程序的基石。 其次,DOM...
在本文中,我们将深入探讨如何使用JavaScript实现特效图片的循环显示,这是网页设计中常见且重要的功能,可以提升用户体验。 首先,我们需要理解基本的HTML结构来展示图片。一个简单的HTML图片标签如下: ```html ...
循环中,将前一个函数的参数转换为数组并添加到`result`数组中,之后,继续向上追溯调用链,直到没有更多调用者为止。 下面是具体的代码实现: ```javascript function getCallerArgument() { var result = []; ...
- **错误处理**:在回调函数中,错误处理通常通过在回调函数的第一个参数接收错误对象(如`err`)来实现。如果没有错误,则`err`为`null`。 **5. 高阶函数与回调** 高阶函数是可以接受一个或多个函数作为参数,...