`
275012124
  • 浏览: 36928 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

js作用域问题

 
阅读更多

例如:

for(var i = 0; i < _msg.length; i++){
    var _div = document.createElement('<div>');
    var _a = document.createElement('<span>');
    _a.style.cursor="pointer";
    _a.innerText = _msg[i].title;
    _a.style.textDecoration ='underline';
    _a.attachEvent('onclick',function(){
     window.open(_a.id);
    });
    _a.attachEvent('onmouseover',function(){
     _a.style.color="red";
    });
    _a.attachEvent('onmouseout',function(){
     _a.style.color="#000000";
    });
    _a.id = 'http://<%=request.getLocalAddr()%>:8890/itsm/kb/kbAction.action?processObject.id='+ _msg[i].proObjId +'&processObject.working=false&form.id=kb_query_form&isPrint=1';
    _div.appendChild (_a);
    document.getElementById('kbs').appendChild (_div);
   }

上面这段代码循环创建了N个对象,并注册了相应的事件,但这段代码由于有作用域的问题所以在发生事件的时候,始终是最后一个对象发生作用。

原因:_a实际上是当发生事件的时候才从作用域取出。当事件发生的时候,原来的函数已经执行完毕,因此_a的值等于最后一个,所以就会看到始终是在最后一个对象上起作用。

 

解决方法:

把事件注册移到独立的函数上去,让该函数保存相应的副本。

for(var i = 0; i < _msg.length; i++){
    var _div = document.createElement('<div>');
    var _a = document.createElement('<span>');
    _a.style.cursor="pointer";
    _a.innerText = _msg[i].title;
    _a.style.textDecoration ='underline';
    
    regEvent(_a, "onclick");
    regEvent(_a, "onmouseover", 'red');
    regEvent(_a, "onmouseout", '#000000');
    
    _a.id = 'http://<%=request.getLocalAddr()%>:8890/itsm/kb/kbAction.action?processObject.id='+ _msg[i].proObjId +'&processObject.working=false&form.id=kb_query_form&isPrint=1';
    _div.appendChild (_a);
    document.getElementById('kbs').appendChild (_div);
   }

 

function regEvent(_obj, _eventName, _styleValue){
  if(_styleValue){
   _obj.attachEvent(_eventName, function(){
    setColor(_obj, _styleValue);
   });
  }else{
   _obj.attachEvent(_eventName, function (){
    window.open(_obj.id);
   });
  }
 }
 function setColor(_a, _value){
  _a.style.color = _value;
 }

分享到:
评论

相关推荐

    javascript变量作用域

    JavaScript 变量作用域详解 JavaScript 变量作用域是基于其特有的作用域链的。在 JavaScript 中,变量作用域是指变量可以被访问和修改的范围。 JavaScript 没有块级作用域,而是基于函数作用域和全局作用域的。 ...

    深入理解JavaScript作用域和作用域链

    JavaScript作用域是编程中至关重要的概念,它规定了变量和函数的可见性及生命周期。JavaScript主要有两种作用域:全局作用域和局部作用域。 全局作用域是指在代码的任何位置都可以访问的变量或函数,这通常包括在最...

    js变量作用域

    ### JavaScript 变量作用域详解 #### 一、引言 在探讨JavaScript的面向对象特性之前,理解变量作用域的概念至关重要。本篇文章旨在通过一系列示例和解释,帮助读者掌握JavaScript中的变量作用域机制。 #### 二、...

    javascript执行环境,作用域理解

    JavaScript 执行环境和作用域的深层次理解 在 JavaScript 中,执行环境和作用域是两个非常重要和基本的概念,理解了这两个概念对于 JavaScript 中很多脚本的运行结果就能明白其中的道理了。执行环境是一个概念,一...

    javascript作用域

    讨论javascript作用域,很多人被javascript作用域搞迷糊了,这个应该有用。

    深化理解javascript作用域其次篇之词法作用域和动态作用域_.docx

    深化理解javascript作用域其次篇之词法作用域和动态作用域_ 深化理解javascript作用域其次篇之词法作用域和动态作用域,是javascript中非常重要的一部分。理解词法作用域和动态作用域对javascript的编程至关重要。...

    JavaScript作用域原理

    JavaScript作用域是编程中至关重要的概念,它定义了变量、函数和对象的可见性和生命周期。在JavaScript中,作用域主要分为两种类型:全局作用域和局部作用域。此外,随着ES6的引入,块级作用域和函数作用域也变得...

    05-JavaScript作用域.pdf

    JavaScript作用域是指在JavaScript代码中,变量、常量、对象和函数能够访问的范围。在编程中,变量和函数的使用都受到作用域的限制,决定了它们能够在哪些代码块中被引用。作用域有助于防止变量命名冲突,也使得程序...

    函数的全局和局部作用域和变量-作用域.html

    // 全局作用域:在script之间或者一个独立的js文件 script之间或者一个独立的js文件里的内容区域,在全局作用域中定义的作用域 全局作用域。 在任何位置都可以访问 // 局部变量:在函数作用域之间里的一个或者...

    js作用域基本介绍.doc

    JavaScript 作用域是编程中一个至关重要的概念,它规定了变量和函数的有效范围,即它们在哪里可以被访问和使用。理解作用域对于编写可维护和高效的代码至关重要。本文将深入探讨 JavaScript 的全局作用域和局部作用...

    深入理解变量作用域

    本文将从JavaScript权威指南出发,深入探讨变量作用域的相关知识点,包括全局作用域、局部作用域、以及闭包等高级概念。 #### 二、全局作用域与局部作用域 1. **全局作用域** - 定义:在JavaScript中,如果一个...

    理解JavaScript作用域和作用域链

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。任何程序...

    深入理解JavaScript作用域共12页.pdf.zip

    JavaScript作用域是编程中至关重要的概念,尤其是在JavaScript这种动态类型的脚本语言中。它规定了变量、函数以及其它标识符的可见性和生命周期,是代码组织和管理的关键元素。本资料"深入理解JavaScript作用域共12...

    关于JavaScript作用域你想知道的一切

    Javacript 中有一系列作用域的概念。对于新的JS的开发人员无法理解这些概念,甚至一些经验丰富的开发者也未必能。这篇文章主要目的帮助理解JavaScript中的一些概念如:scope,closure, this, namespace, function ...

    JavaScript作用域示例详解_.docx

    JavaScript作用域是编程中至关重要的概念,它规定了变量和函数的可见性和生命周期。了解JavaScript作用域对于编写高效、安全的代码至关重要。本篇将详细解释JavaScript作用域的几个核心特性,包括无块级作用域、函数...

    javascript 闭包、匿名函数、作用域链

    JavaScript中的闭包、匿名函数和作用域链是编程中至关重要的概念,它们是理解JavaScript运行机制的关键。在本文中,我们将深入探讨这三个概念,并通过实际示例来展示它们的运用。 首先,我们来讨论“闭包”。闭包是...

Global site tag (gtag.js) - Google Analytics