为什么javascript中的“this”指针范围受限制?

时间:2012-01-28 21:38:21

标签: javascript closures

调用w.r.t div的this指针的范围或可见性仅限于其所针对的函数,而不限于其NESTED函数。

但是,该函数的所有局部变量在嵌套函数中都是可见的 - 为什么会发生这种情况?通过在div上使用this调用函数来获取<function name>(this)指针 - - 这并不意味着即使this指向也是<function name>

中的局部变量

简而言之,这是让我困惑的代码..

<html>
<script type="text/javascript" >
    function tst1(){
    setTimeout(
    function (){
    alert(this.id)
    }, 2000)
    }
    function tst2(){
    var elem = this
    setTimeout(
    function (){
    alert(elem.id)
    }, 2000)
    }
</script>
<style type="text/css">
    .test{
    margin: 40px 100px;
    background-color: green;
    width: 200px;
    line-height: 40px;
    text-align: center;
    height: 40px;
    }
</style>
<div id="fooBar"  class="test" onclick="tst1.call(this)"> Emily Rossum</div>
<div id="chickenRun" class="test" onclick="tst2.call(this)"> Emily Rossum</div>
</html>

tst1 functionthis变量为null,但该函数的局部变量应在嵌套函数中可见,如tst2所示。

我正在阅读闭包,因为稍后调用该函数 - 即使在返回setTimeouttst1后通过tst2 - 这两个函数是否都关闭? (如果是这样,这是父函数中的变量应该在嵌套函数中可见,不应该吗?)

1 个答案:

答案 0 :(得分:2)

javascript中的this变量与其他变量不同,因为它始终特定于特定的函数调用。每个函数调用基本上只有一个this,尽管它可能与外部函数中使用的this相同,但它不一定。

如果要保留外部this以在内部函数中使用,请将其保存到本地。

var outer = function () { 
  var self = this;  // Save current 'this' in a local
  var inner = function () { 
    self.name;  // refers to the original outer 'this.name' 
    ...
  };
  ...
};