js变量"隔壁老王"this

  先看一段代码

<script>
var a = 10;
var b = 20;
function fun() {
var a=20;c=30; //this.c=30;
// console.log(this); Window
alert(a+=b+c);
}
fun();//70
console.log("a:"+a+" b:"+b+" c:"+c); //a:10 b:20 c:30
</script>

其实这段代码只是说明变量、局部变量作用域的问题.
但为什么在函数内不用var 声明的变量就是全局变量呢?
因为有隔壁老王this啊(你不在我帮忙,我住隔壁我姓王!).
当声明变量的时候如果不用var,变量就会继承this的作用域.
在一个函数中不用var定义'好像'一定就是全局的。


那就看一下在类中的情况。

<script>
var name = "The window";
var object = {
name : "My object",
Func : function(){
c = 20;
console.log(this); //object
aa = function() {
a = 20;
console.log(this); //window
}
return aa();
}
}
console.log(a);//a is not defined!
alert(object.Func());
</script>


在类中不用var,声明的变量就不是全局的!

posted @ 2017-05-25 07:09  Charles王志会  阅读(126)  评论(0)    收藏  举报