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)//
console.log(result)//

(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//解除引用

解除引用不意味着自动回收这个值所占的内存,真正地作用是让值脱离执行环境,方便垃圾收集器下次运行时将其回收

浅谈javascript中变量作用域和内存(2)的更多相关文章

  1. 浅谈javascript中变量作用域和内存(1)

    先理解两个概念:基本类型和引用类型的值 1.基本类型和引用类型的值 (1)定义: 基本类型:指简单的数据段,比如按值访问的js五种基本数据类型undefined.null.boolean.number ...

  2. 浅谈javascript中的作用域

    首先说明一下:Js中的作用域不同于其他语言的作用域,要特别注意     JS中作用域的概念: 表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境.Javascript的作 ...

  3. 浅谈javascript的变量作用域

    1.变量遵循先声明再使用. console.log(b); b=123; 代码运行结果: Uncaught ReferenceError: b is not defined 2.方法内定义的局部变量外 ...

  4. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  5. 浅谈JavaScript中的null和undefined

    浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...

  6. 浅谈JavaScript中的正则表达式(适用初学者观看)

    浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...

  7. 浅谈JavaScript中的变量、参数、作用域和作用域链

    基本类型和引用类型 在JavaScript中有两种数据类型值.基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指的是可能由多个值构成的对象.在JavaScript中有5种基本数据类型 ...

  8. 浅谈JavaScript中的内存管理

    一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识. 首先说,JavaScript中的变量包含两种两种类型: 1)值类型或基本类型:undefined.null.numb ...

  9. 浅谈JavaScript中闭包

    引言 闭包可以说是JavaScript中最有特色的一个地方,很好的理解闭包是更深层次的学习JavaScript的基础.这篇文章我们就来简单的谈下JavaScript下的闭包. 闭包是什么? 闭包是什么 ...

随机推荐

  1. 【Mybatis】MyBatis之Generator自动生成代码(九)

    MyBatis Generator 简介 MyBatis Generator 连接数据库表并生成MyBatis或iBatis文件.这有助于最大限度地减少使用MyBatis时为数据库文件创建简单CRUD ...

  2. 【composer】 PHP composer 镜像地址更换

    如果你使用的是 laravel-china.org 得 composer 镜像.那么近期执行更新时候就会报错: 莫慌,这是因为 laravel-china.org 已经停止了对composer得更新. ...

  3. 如何做ui自动化---步骤详解

    第一步: 得到功能测试的常规用例,查看是否可以进行自动化,要明确,自动化不是为了自动化而自动化,自动化是节省人力,主要做回归测试,如果变动性特别大,不建议做自动化,具体可查看其它文章“什么适合做自动化 ...

  4. gen语言

    概率编程语言(PPL)领域正经历着机器学习技术快速发展带来的奇迹般的复兴.在短短的几年里,PPL 已经从一个模糊的统计研究领域发展出十几个活跃的开源方案.最近,麻省理工学院(MIT)的研究人员推出了一 ...

  5. Django_图片的上传下载显示配置

    图片上传的配置 image = models.ImageField(upload_to='org/%Y/%m',...) upload_to默认是上传到项目的'MEDIA_ROOT/org/%Y/%m ...

  6. LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)

    145. 二叉树的后序遍历 145. Binary Tree Postorder Traversal 题目描述 给定一个二叉树,返回它的 后序 遍历. LeetCode145. Binary Tree ...

  7. SSRS Reporting Service安装与部署

    安装与部署SSRS步骤 什么是SSRS SQL Server Reporting Serivces(SSRS) 是一种强大的报表设计开发工具或者说是服务,它提供了一系列本地工具和服务,用于创建.部署和 ...

  8. 综合应用,jieba,去标点,分词保存,统计,删词,输出

    import jieba fp1=r'D:/python/a.txt' outph=r'D:/python/out.txt' f=open(fp1,'r',encoding='utf-8') txt= ...

  9. PAT(B) 1069 微博转发抽奖(Java)

    题目链接:1069 微博转发抽奖 (20 point(s)) 题目描述 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确 ...

  10. PAT(B) 1049 数列的片段和(C)规律

    题目链接:1049 数列的片段和 (20 point(s)) 题目描述 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我 ...