javascript学习日记之变量的作用域

变量的作用域是往往是人们轻易忽略而又至关重要的问题,尤其是在javascript中。

  1. javascript中变量的作用域有以下特点:
  • 以函数划分的函数域
  • 没有特定的块作用域
  • 没有用var声明的变量就是是全局变量

下面来看一个具体示例:

  var global  =1;
  function f(){
      var local = 2;
       global++;
      return global;
  }
   alert(f()) ;//2
   alert(f()) ;//3
   alert(window.local);//undefined

代码中可以看出声明一个全局变量global 和一个局部变量local;
而函数f()可以访问外面的全局变量global;
但是在函数f()外 局部变量local是不存在的
很显然函数内的代码可以像访问局部变量那样访问全局变量,
反之则不行

2 函数作用域的声明提前问题

先来看如下代码:
 var scope ="global";
  function f(){
    alert(scope);//undefined
    var scope ="local";
    alert(scope);//local
  }
  f();

很显然第一个弹出框并没有如我所想弹出的global而是undefined
这是为什么呢?
其实由于函数作用域特性
函数域始终优于全局域
同名的局部变量会覆盖掉全局变量
而第一次调用alert的时候scope还没正式定义 所以为undefined
以上代码可以理解为:

function f(){
    var scope;
    alert(scope);
    var scope ="local";
    alert(scope);
  
  };
  f();
  //等价与函数内变量的声明'提前'至函数体顶部
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容