浅谈javascript中变量作用域和内存(2)
时间:2019-10-31
本文章向大家介绍浅谈javascript中变量作用域和内存(2),主要包括浅谈javascript中变量作用域和内存(2)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、无块级作用域
javascript没有块级作用域,这会让其他程序员在理解js代码上很痛苦。在其他很多语言,比如C,大括号括起来的代码块都有自己的作用域
举个例子
if(true) { var name = "saber" }; console.log(name)//saber
上面的代码可以看到,if判断语句中定义的变量所在的环境是全局环境,因此在if判断外面也能访问到该变量
(1)声明变量
function add(num1,num2){ // var sum = num1+num2;//注意:如果下面sum = num1+num2;换成本行的话,会报错sum is not defined,因为使用了var定义sum,导致该变量会被添加到最近的局部环境中,也就是add函数中,因此外部访问不到,就会报错未定义 sum = num1+num2;//这里没有使用var,当函数执行完后,sum被添加到全局环境中,因此函数外部能访问到 return sum; } var result = add(7,7); console.log(sum)//14 console.log(result)//14
(2)查询标识符
就不说废话了,直接上代码解释:
var name = "saber"; function getName(){ return name; } console.log(getName())//saber
在调用函数getName的时候会引入定义的变量name。为了确定name的值,将开始两步搜索过程。首先搜索getName()的对象,看看是否包含一个叫name的标识符。好的,没有呢,那就继续找下一个变量对象,啊哈到了全局环境的变量对象了哈,哦豁找到了定义的name变量,结束。
简单来说就是从局部环境开始:开始→局部环境→上一级环境→上一级...→全局环境→结束。
哪有人说,假如我在函数内部就定义了,结果会怎样,你看!
var name = "saber"; function getName(){ var name = "archer"; return name; } console.log(getName())//archer
原因很简单,从局部环境开始查询,查到后,就没后面什么事了,搜索停止。
2、垃圾回收机制
js能自动管理内存的回收,具体原理很简答:
找出那些不再使用的变量,然后释放其占用的内存。
3、管理内存
在代码执行中值保存必要的数据,一旦数据不再有用,最好将其设为null来是释放引用——解除引用
function getName(){ var name = "saber"; return name; } var person = getName() console.log(person)//saber person = null//解除引用
解除引用不意味着自动回收这个值所占的内存,真正地作用是让值脱离执行环境,方便垃圾收集器下次运行时将其回收
原文地址:https://www.cnblogs.com/SaberInoryKiss/p/11772404.html
- 神马?SQL竟然可以解脑筋急转弯的题目?
- android中一些特殊字符(如:←↑→↓等箭头符号)的Unicode码值
- 基于SpringBoot的任务管理平台v1.0正式发布
- 大数据系统的Lambda架构
- AKKA中的事件流
- Java初涉感悟
- Android 6.0 Permission权限与安全机制
- SpringBoot工作机制
- Android权限管理PermissionsDispatcher2.3.2使用+原生6.0权限使用
- SpringBoot中的IoC
- Sonar安装配置
- 《AngularJS深度剖析与最佳实践》推荐序
- JavaScript递归方法 生成 json tree 树形结构数据
- springboot使用hibernate validator校验
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法