javaScript变量作用域

1.局部变量与全局变量的优先级

在函数体内,局部变量的优先级高于同名的全局变量。如果在函数内声明的一个局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就会被局部变量覆盖

我们看到全局变量a已经被函数内的局部变量a所覆盖。

2.局部变量的声明

尽管在定义全局变量时可以不用使用var 声明,但是在声明局部变量时则必须使用var加以声明,否则会产生问题,请看下面的例子

3.函数作用域和声明提前

在java编程语言中,每一段花括号内的代码都有各自的作用域,而且变量在声明它们的代码段之外是不可见的,我们称之为块级作用域。但是在javaScript中则不然,javaScript是函数级作用域

即:变量在声明它的函数体以及这个函数体嵌套的任意函数体内都是有意义的

javaScript变量作用域只要是在函数体内,那么这个变量无论在函数体的什么位置,它都是可见的,这就相当于将所有变量提至函数体上部提前声明。请看下面的例子

我们刚才说到变量的提前声明,那么上面的代码就等价于

4.作用域链

在书中关于这一点的描述是非常混乱的,简直不知所云,如下图所示

在网上找了两个解答,仍然不够明确

1.第一条

2.第二条

可以回去请教一下网络大神。

原文地址:https://www.cnblogs.com/hdnav/p/7700697.html