javascript基础-函数作用域

函数作用域

-       调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁。

-       每调用一次函数就会创建一个全新的函数作用域,他们之间是相互独立的。

三次调用abc函数,每个调用都是独立的函数作用域,所以三个作用域中的变量x也并不是一个变量,而是相互独立的三个变量,其作用域在其函数中。

-       在函数中可以访问到全局变量

-       在全局(函数外)是无法访问到局部变量的

-       全局和局部存在相同名称变量时,优先在自身作用域中进行查找

如果函数内a不存在了,那么就会去全局查找a:

 

 

bbc函数未被调用,所以并没有执行。

全局无法直接调用到bbc函数,所以提示“bbc没有被定义过”。

在abc中调用bbc函数,读取的变量a优先在本域查找,没有则去上一级域abc查找,如果还没有,再去全局查找。

-       在函数中要访问全局变量可以使用window对象

-       在函数中同样存在声明变量和函数提前的特性

提示的是a变量存在,但是没有赋值。

在函数bbb前进行bbb函数调用,同样可以。

 

现在局部查找变量x,局部存在x只是没有赋值。相当于:

 

 

 

如果不使用var定义变量,则局部x变量并不会在函数的起始进行变量的定义(var x;)。

 

注意这里,abc函数中的x = 100的变量x,由于在abc函数内并不存在x变量,所以会向上查找x,所以全局x变成了100.

 

如果在局部x前添加var,那么就变成了局部变量了(因为添加var后,会在函数的一开始就进行x变量的定义)。

 

虽然是在函数内,但是并没有用var定义变量,所以相当于window.x=100是一个全局变量。

 

x是全局变量,按理说是可以输出的,但是x=100在输出后,没有var关键字是不会提前定义的,所以找不到。

 

 

 

 

放在前面就可以了,x是全局变量。

 

打印的是形参x,因为传递了形参,所以不会调用全局x。

相当于

 

 

 

 

posted @ 2021-03-22 10:35  Hhhr  阅读(67)  评论(0编辑  收藏  举报