精进成长的本质是消除模糊。
作用域:限制变量可以被访问的环境。
js的作用域分为全局作用域,函数作用域,块级作用域(ES6新增)。
块级作用域:含有let,const变量的代码块({})
js是弱语言类型(可以不声明变量类型,直接赋值)。
i=100;//Number类型
i="variable";//String类型
i={x:4};//Object类型
i=[1,2,3];//Array类型
js变量声明方式分为隐式声明和显式声明。
var i=100;//显式声明
i=100;//隐式声明
js变量分为局部变量和全局变量。
局部变量:
(1)函数内使用var声明的变量(显式声明)
(2)函数参数列表中的形参(隐式声明)
全局变量:
(1)函数外var声明的变量(显式声明)
(2)函数内没有使用var声明的变量(隐式声明)
(3)使用window全局对象声明的变量,如:window.a=123;
1、解释:代码被编译和执行时所在的环境,也可以称之为执行环境。
2、分类:“全局执行上下文”,“函数执行上下文”
全局执行上下文:默认的、最基础的执行上下文,不在任何函数中的代码都位于“全局执行上下文”中,一个程序中只能存在一个“全局执行上下文”。全局环境不会被回收。它做了两件事:
a.创建一个全局对象,在浏览器中这个全局对象是window对象。
b.将this指向这个全局对象,在全局执行上下文中指向window。
函数执行上下文:每次调用函数时,都会为该函数创建一个新的执行上下文,只有在函数被调用时才会被创建。
一共有三个阶段:创建阶段、入栈执行阶段、出栈回收阶段。
执行栈也叫调用栈,先入后出结构,入栈和出栈对应内存的申请和释放。
作用域
var a = 1;if(true){// 死区开始--------------------------// 访问 a 都会报错,不能在声明之前使用a = 2;console.log(a);// 死区结束--------------------------let a;console.log(a); // undefineda = 3;console.log(a); // 3}console.log(a);//1,不会影响块作用域之外的a的值
以上if中的代码块是一个单独的块作用域,不影响全局作用域中的变量a。
上一篇:LeetCode50天刷题计划第二季(Day 29 — 寻找峰值(11.10-12.10)
下一篇:半场-阿森纳2-0水晶宫 加布里埃尔头球双响,赖斯萨卡献助攻 联赛杯阿森纳1-3遭布莱顿淘汰 阿森纳1-0水晶宫赖斯集锦