变量是存储数据的地方。声明一个变量,相当于申请了一块内存地址,变量赋值就是将数据存储于这块内存之中。
我们使用 var 关键词来声明变量:
var name = 'ruims';
先看一个简单的声明语句:
var name = 'xiuyan';
在 JS 引擎眼里,它却包含了两个声明:
var name; //(编译时处理)name = 'xiuyan'; //(运行时处理)
此处的编译时处理和运行时处理,分别对应编译阶段和执行阶段,下面详细解释:
编译阶段
主角:编译器
登场!
name
变量执行阶段
主角:JS引擎
登场!
name
变量这就是变量声明的逻辑。
作用域存储和访问变量的一套规则,一个区域。
变量声明是在一个作用域内,变量访问也是在一个作用域内。
作用域分为这几种:
全局变量:声明在任何函数之外的顶层作用域的变量。全局变量拥有全局作用域
在函数内部定义的变量,拥有函数作用域
function sayHello() {// hello 被定义成局部作用域变量var hello = 'hello everyone';console.log(hello);}console.log(hello); // 抛出错误:hello 在全局作用域未定义
let
或者const
声明{let a = 1;console(a);}
模块作用域是 CommonJS 中的作用域规则。在 nodejs 中,任何独立的脚本文件中声明的变量都相互独立,互不污染