博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
作用域
阅读量:6905 次
发布时间:2019-06-27

本文共 877 字,大约阅读时间需要 2 分钟。

概念:

  • 提供代码的执行环境;
  • 对于代码执行要有作用域的概念;
  • 开辟一个栈内存;只有关闭浏览器这个栈内存才会销毁;

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作用域 不销毁

 

转载于:https://www.cnblogs.com/qingtiao/p/10293328.html

你可能感兴趣的文章
JavaScript语法
查看>>
js事件浏览器兼容
查看>>
获取贴吧对应页html及写入文件
查看>>
Entity Framework学习初级篇3--LINQ TO Entities
查看>>
android 相对布局
查看>>
SilverLight商业应用程序开发---学习笔记(9)
查看>>
MS DTC 无法正确处理DC升级/降级事件。MS DTC 将继续运行并使用现有的安全设置。...
查看>>
CAN总线基础
查看>>
第3课 QT的诞生和本质
查看>>
CentOS6.8下安装Docker
查看>>
JavaScript HTML Handlebars Template
查看>>
java.lang.NumberFormatException 错误及解决办法
查看>>
python:大量参数如何传递
查看>>
curl 跨域请求回来的json数据带有BOM 字符\ufeff,掉诡异的BOM \ufeff
查看>>
Javascript下的AJAX
查看>>
<c:out>标签中的escapeXML属性
查看>>
Ado.Net Helper
查看>>
OpenWrt Web界面修改及功能实现实例说明
查看>>
java内存溢出的解决思路
查看>>
hibernate(六)一对一映射
查看>>