作用域
Posted qingtiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作用域相关的知识,希望对你有一定的参考价值。
概念:
- 提供代码的执行环境;
- 对于代码执行要有作用域的概念;
- 开辟一个栈内存;只有关闭浏览器这个栈内存才会销毁;
1、全局作用域:
- 一打开浏览器,浏览器就会形成一个全局作用域;
- 在控制台写代码就相当于在全局作用域里写代码 ;
- 在全局作用域声明的变量我们称之为全局变量;
2、私有作用域
(1)私有变量
在私有作用域中只有两种情况是私有变量
- 被声明过的变量(带var/function)
- 形参也是私有变量
(2)函数执行
- 声明函数的时候,开辟一个堆内存;把函数中的代码当作字符串存到堆内存里
- 函数执行:把函数体中的字符串当代码执行;
- 在变量提升之前还会有一个形参赋值的动作;
- 变量提升之后再去执行代码;
3、两个作用域之间的关系
- 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量;
- 如果两个不同的函数体各自声明了同一个变量,那么该变量只在各自的函数体内起作用。换句话说,不同函数内部的同名变量互相独立,互不影响;由于javascript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行:
4、块级作用域
- 一般用大括号{}包含的部分会形成一个块级作用域;用let/const基于ES6语法规范渲染的;(对象的大括号不是块级作用域) 不会对上级作用域产生影响;
- 循环体也是块级作用域,初始值设置的变量是当前本次块级作用域中的变量
5、作用域销毁
- 立即销毁:函数执行完成之后返回的内容(引用数据类型)没被占用;值类型直接销毁;
- 不立即销毁:返回的内容(引用数据类型)暂时被占用
- 不销毁:返回的内容(引用数据类型)被占用
function f1() { return function() { console.log(1); }; } f1(); //f1作用域 立即销毁 f1()(); //f1作用域 不立即销毁 var f2 = f1(); //f1作用域 不销毁
以上是关于作用域的主要内容,如果未能解决你的问题,请参考以下文章