`
uule
  • 浏览: 6348927 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

this为何要赋值给局部变量that

    博客分类:
  • JS
 
阅读更多

this的取值是跟它所在的上下文有关的。具体说就是跟它位于哪个函数中有关,以及跟这个函数被调用的方式有关。

 

在闭包里,还有在事件绑定的时候,由于作用的问题,this的上下文(作用域)变了,这个确实在JS中有点诡异,把this设置成一个局部变量后,外部函数里嵌套的函数就可以正确识别这个变量了。

 

 

tab.prototype.init=function(){
            for(var i=0,len=this.span.length;i<len;i++){
                var that=this;
                that.span[i].index=i;
                that.span[i].onclick=function(){
                   that.show(this.index);
               }
            }
            this.show(1);
        }

 详细解释

 

 

分享到:
评论

相关推荐

    javascript this详细介绍

    为了避免这种情况,通常会将 `this` 绑定到一个局部变量(常见的做法是使用 `that` 或 `self`),如下所示: ```javascript var person = { name: "chaimm", setName: function(name) { var that = this; // 将 ...

    Android:Field can be converted to a local varible.的解决办法

    这个警告表示IDE检测到某个字段(Field)在类内部只在一处被赋值,并且其所有使用都在赋值之后,因此可以将该字段转换为局部变量,以提高代码的效率和可读性。 ### 问题解析 当Android Studio显示“Field can be ...

    《Java编程风格》中文版.pdf

    - 当成员变量与局部变量名称冲突时,使用`this`关键字来明确指向成员变量。 - 示例: ```java public class MyClass { private int id; public void setId(int id) { this.id = id; // 使用this关键字明确指向...

    js面向对象的写法

    `this`在这里没有被用来引用对象实例,而是通过局部变量`obj`来引用。 2. **构造函数模式** 这是最常见的面向对象写法,使用`function`关键字定义构造函数,通过`new`操作符创建对象实例。`this`关键字在构造函数...

    java coding style

    - **局部变量声明**:用于声明局部变量。 - **示例**: ```java int i; double d; ``` - **数组声明**:用于声明数组。 - **示例**: ```java int[] array; double[][] matrix; ``` ##### 8.2 复合语句 ...

    freemarker总结

    FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; // 全局范围 function test() { global $g_var; // 这样...

    Java语言编码规范

    #### 1.1 为什么要有编码规范(Why Have Code Conventions) 编码规范对于程序员而言尤为重要,其重要性体现在以下几个方面: 1. **提高代码可读性**:一致性的编码风格能够帮助团队成员更快地理解彼此编写的代码。 ...

    GNU C扩展 学习记录

    复合语句块允许在一个复合语句中定义局部变量并返回一个值。这种特性常用于宏定义中,以避免某些副作用。例如: ```c int rslt = ({ int a = 5, b; b = a + 3; b; // 最后一条语句作为复合语句块的返回值 }); ``...

    java面试宝典

    96、Hibernate工作原理及为什么要用? 22 97、Hibernate是如何延迟加载? 22 98、Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 22 99、说下Hibernate的缓存机制 22 100、Hibernate的查询方式 23 101...

    python简明教程

    - **为什么选择Python而非Perl**: - 更清晰的语法结构,易于理解和维护; - 更广泛的社区支持和资源; - 在科学计算、数据分析等领域有着更为强大的库支持。 - **程序员的话**: - 强调Python不仅是一种语言,...

Global site tag (gtag.js) - Google Analytics