Heim  >  Artikel  >  Web-Frontend  >  有关js的变量作用域和this指针的讨论_javascript技巧

有关js的变量作用域和this指针的讨论_javascript技巧

WBOY
WBOYOriginal
2016-05-16 18:13:52830Durchsuche
一、变量作用域:[P71]

这一句话说的非常精辟:“在ECMAScript中,只有两种执行环境,全局环境和函数环境,每个函数都是一个执行环境,包括嵌套函数。换句话说,其他情况下即使变量声明在一对大括号中,在括号外部仍然可以访问这些变量”。以下给出例子:
复制代码 代码如下:

for(var i=0; ivar num = 20; // 在for语句中声明的变量
}
alert(num); // 在for语句外部调用变量,仍然可以得到num的值

对异常语句也同样可以:
复制代码 代码如下:

try {
var num = 20; // 在try语句中声明的变量
a = b; // 引起一个异常
} catch(e) {
alert(num); // 在catch语句中调用变量,将得到20
} finally {
alert(num); // 在finally语句中调用变量,将得到20
}
alert(num); // 在try语句外部调用变量,将得到20

除了上面所演示的这两种语句外,一对大括号也无法构成一个执行环境,例如:
复制代码 代码如下:

{ var num = 1;3 }

二、this指针:[P83]

在这里列出this在ECMAScript中的不同含义:

(1) 在全局执行环境中使用this,表示Global对象,在浏览器中就是window对象。

(2) 当在函数执行环境中使用this时,情况就有些复杂了。如果函数没有明显的作为非window对象的属性,而只是定义了函数,不管这个函数是不是定义在另一个函数中,这个函数中的this仍然表示window对象。如果函数显示地作为一个非window对象的属性,那么函数中的this就代表这个对象。(当然可以使用apply或者call函数来取代默认this的引用,详见[P88])

(3) 当通过new运算符来调用函数时,函数被当做一个构造函数,this指向构造函数创建出来的对象。
参考:
《JavaScript基础与案例开发详解》清华大学出版社
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn