请看下面两段代码,解释一下输出值。
var a = 1; function b() { var a = 2; function c() { console.log(a); } return c; } b()();
为什么输出是2;这里的console.log(a),与console.log(this.a)有什么区别。
var a = 1; function b() { var a = 2; function c() { console.log(this.a);//不同的地方 } return c; } b()();
上面一段又不一样,这点比较好理解,执行环境是全局变量,所以输出的是1.
前者输出为2其实很好理解,因为局部变量覆盖了全局变量,当函数执行到b时候,首先在自己(b)的上下文查找a,如果存在a就停止向上搜索,如果不存在就会找到位于最顶层的全局变量a了,所以这里就输出为2而不是你预设的全局变量 a( =1)了
至于如果在变量a前加上this,那就相当于限定输出了,因为在大多数独立的函数内部,this是指向全局空间的,所以这里this.a 就输出1了,然后衍生下就是你需要理解下this在不同场景中指向(可能是全局也可能是函数自身上下文)
这里补充一个例子,说明下this在不同场景下代表的上下文
//example function VisonP(){ function globalThis() { console.log( this ) ; // 指向全局 } this.selfThis = function(){ console.log( this ); //执行函数对象(visonP自身); } this.showGlobaThis = function(){ globalThis(); } }; var ob = new VisonP(); ob.selfThis(): ob.showGlobaThis();
@visonme:
var a = 1; function b() { var a = 2; console.log(a);//你解释的是这种情况 function c() { console.log(a); } return c; } b()();//这种情况反馈的是函数式编程的闭包问题 var a=b(); a();
你虽没有回答到问题的点,但是要谢谢。
程序都是从"上到下"执行的:
在"类"里面 public class person{}
方法里面使用:this,指的是当前类(person)
在"html"中使用:this,也表示当前对象,例如 <span onclick(this)></span>这里的this就是指 span对象