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();
  //等价与函数内变量的声明'提前'至函数体顶部

你可能感兴趣的:(javascript学习日记之变量的作用域)