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作用域的主要内容,如果未能解决你的问题,请参考以下文章

varlet 和 const 的区别以及暂时性死区

varlet 和 const 的区别以及暂时性死区

let和const

ES2015中let的暂时性死区(TDZ)

let const 暂时性死区问题

let const 暂时性死区问题