js作用域
Posted iiiLISA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js作用域相关的知识,希望对你有一定的参考价值。
精进成长的本质是消除模糊。
作用域:限制变量可以被访问的环境。
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); // undefined
a = 3;
console.log(a); // 3
console.log(a);//1,不会影响块作用域之外的a的值
以上if
中的代码块是一个单独的块作用域,不影响全局作用域中的变量a。
以上是关于js作用域的主要内容,如果未能解决你的问题,请参考以下文章