JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

时间:2021-07-10 22:40:58

变量的提前声明(全局作用域)

- 我们知道js的代码是自上而下执行的。如下,console.log(a)在var a=10前面,但是结果输出的是undefined。

- 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值);也就是说在执行代码之前凡是var 声明的变量都已经是存在了,就已经是在栈内存中了。

JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

- 但是如果声明变量时不适用var关键字,则变量不会被声明提前,会报错。

JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

函数的提前声明(全局作用域)

- 创建一个函数有3中方式,其中函数声明方式和上边var 声明变量是类似的。在没有声明函数f1的时候就调用,而声明在后面。

JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

- 但是其他方式创建一个函数不行。例如表达式方式创建函数是会报错的,var f2;f2这个变量是一件有了,但是还没执行到赋值那里,所以f2后边加个(),这样就是一个变量加个()而已,肯定会报错啊。

JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

函数作用域中的提前声明

- 在函数作用域也有声明提前的特性。

- 使用var关键字声明的变量,会在函数中所有的代码执行之前被声明。在输出a的时候,a已经被声明但是没有赋值所以结果是undefined。

JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

- 在函数中(函数作用域),不使用var声明的变量都会成为全局变量。在全局作用域中的c赋值为30,调用函数f6,输出c,在函数作用域中没有使用var 声明变量c,所以找上一级作用域的c输出,结果为33,由于函数作用域中的c没有var 声明,所以是一个全局变量,跟外面是同一个c,赋值为10,所以从值30变成了10。

JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

- 函数声明也会在函数中所有的代码执行之前执行。

JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明

- 创建函数时定义形参就相当于在函数作用域中声明了变量。

JavaScript学习系列博客_21_JavaScript 变量、函数的提前声明