var 作用域||变量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26769677/article/details/69389922

平常我们在使用js 的时候一般使用var来声明变量,相比于C语言Java当中的声明变量要简单一些,但是简单肯定也会有简单的不好之处。 一般来讲,在函数内部(local variable)中,js初始化变量加var的为局部变量不加的时候表现为全局变量(它们都给window对象添加了一个属性)。

例如:

 function foo() {
      t=11
        }
       foo();
       console.log(t); //11
      console.log("t" in window); //true

可见,在函数中不用var声明表现为全局变量,可以对这个属性进行修改。

 function foo(){
  var t=11;
  }
    foo();
   //console.log(t);  //后台输出:is not defined
  console.log("t" in window); //fase

可见这里的t为局部变量,函数当中声明的变量只在函数作用域当中生效,一旦离开了作用域调用就会报错。

我们再看几个例子。

  var b=2;
 function foo1() {
      b=4;
 console.log(b);   //4
 }
 foo1();
 console.log(b);   //4

在这里首先定义了 一个变量b,然后在函数内部修改了b的值,因为函数内部的b为全局变量,修改了函数外的变量b。(函数内的b:“俺先在foo里面找找看有没有和俺相同名字的兄台,有就把它赋值为4.很不幸的是foo里木有,于是俺往外找,找呀找,终于在最外层找到一个b,嘿嘿,先把它干了再说~”)

var b=2;
 function foo1() {
 var  b=4;
 console.log(b);   //4
 }
 foo1();
 console.log(b);   //2

这里我们在函数内部的b前面加上var使它为局部变量,执行后全局变量b就没有被改变。

我们都知道在函数最外部,我们用var声明一个变量为全局变量,但是如果不加var会出现啥子结果捏?

例子:

t=11;
console.log(t);  //11
console.log("t" in window); //true

结果也为全局变量(window对象的属性)。

有人会想:那我只要加上var关键字就能让它只在当前作用域生效咯?

------不一定

注意:JavaScript没有块级作用域. 例如.

 function foo() {
 for(var i=0;i<10;i++){
 console.log("for内"+i);        //0,1,2,3,4,5,6,7,8,9
 }
 console.log("函数内for外"+i);    //10
 }
 foo();

这里在语句内定义一个变量i,但i的表现实则是在函数内定义的。所以我们能够在语句外函数内去引用变量。 那么我们如何使块语句中声明的变量只作用在块语句内呢?

 function foo() {
 (function() {
 for(var i=0;i<10;i++){
 console.log("for内"+i);    //0~9
 }
 })();
 console.log("函数内for外"+i);   //报错
} 
foo();

但是我们不建议过多地使用全局变量,因为全局变量过多很容易出现变量污染的问题,出错的时候也不容易排除。

展开阅读全文

没有更多推荐了,返回首页