this初步深入学习

关于this这一块,在之前我也都是一笔带过,没有很认真的研究过,但是不久前的一次交流,发现自己对闭包的理解稍微有些偏差,于是乎决定自己再去看一遍深入的理解一下闭包的概念,然后在学习闭包的过程中涉及到this关键字的理解,一连串的蝴蝶效应让我深深的认识到自己学习的马虎,总是为求快的一笔带过,结果到最后自己也没能很深入的去了解那些看似浅显却需要很细心和耐心去理解的知识点,所以在这里我借用阮大大的几个例子来让自己更深入的理解到this的神奇之处:

PS:由于本人对this的理解有限,这些都是按照本人理解去说的,所以可能有些出错的地方希望大家多多指正,欢迎大家带着批判的态度去了解这个难懂的家伙!

最神奇的两个例子:
1.纯粹的函数调用,这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。
var n=9;
function f1(){
    this.n = 1;
}
f1();
console.log(n);  //1

2.作为构造函数使用,下面的例子证明this不是全局对象;
var n=9;
function f1(){
    this.n=1;
}
f1();
var result= new f1();
console.log(n);    //9

3.这个是我随性自己实验的一个例子,结果也在意料之中
function f1(){
    var n=9;
    console.log(this.n);  //结果undefined
}
f1();

为什么this.n调取不到函数内n的赋值?
因为this指的是全局对象,而我们都知道作用链决定了我们只能由下向上的在函数内调用上级作用域内变量,而不能由上至下,所以this这个全局对象是调用不到f1函数内部的变量值,如果去掉var就可以了,或者直接this.n = 9;这样也行!

posted @ 2016-04-28 12:11  追风筝的eva  阅读(139)  评论(0编辑  收藏  举报