js作用域

任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。

1、全局作用域:

在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:

  (1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如:

var authorName="";
function doSomething(){
    var blogName="";
    function innerSay(){
        alert(blogName);
    }
    innerSay();
}
alert(authorName);     //minoz
alert(blogName);     //not defined
doSomething();    //minozMin
innerSay();     //not defined

  (2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如:

function doSomething(){
    var authorName="minoz";
    blogName="minozMin";
    alert(authorName);
}
doSomething();     //minoz
alert(blogName);     //minozMin
alert(authorName);     //not defined

    变量blogName拥有全局作用域,而authorName在函数外部无法访问到。

  (3)所有window对象的属性拥有全局作用域

    一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location、window.top等等。

2、局部作用域:

  和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域,例如下列代码中的blogName和函数innerSay都只拥有局部作用域。

function doSomething(){
    var blogName="minozMin";
    function innerSay(){
        alert(blogName);
    }
    innerSay();
}
alert(blogName);     //not defined
innerSay();     //not defined
原文地址:https://www.cnblogs.com/minozMin/p/8022869.html