js的变量,作用域,内存
一,基本类型和引用类型的值
基本类型的值是按值访问的,引用类型的值是保存在内存中的对象
1,动态的属性
只有引用类型的值可以添加属性方法
不能给基本类型添加属性和方法
2,复制变量值
复制基本类型的值,两个变量参与的操作互不影响
复制引用类型的值,两个变量引用同一个对象,改变之一,会影响其二
3,传递参数
按值传递,被传递的值会被复制给一个局部变量
函数内部重写对象,这个变量引用就是一个局部对象了,这个对象会在函数执行 后消失
4,检验类型
instanceof操作符
result = 变量 instanceof 类型 返回true或false
二,执行环境及作用域
全局环境是window对象
1,延长作用域链
try-catch语句的catch块
with语句
2,没有块级作用域
if和for语句 当中的变量声明在if和for语句结束后也依旧存在于循环外部的 执行环境中
1)声明变量
var声明的变量添加到附近最近的环境当中,未用var声明的为全局变量
2)查询标识符
搜索过程,如果在局部环境中找到了该标识符,搜索停止,变量就绪,如果 局部变量中没有找到,沿作用域继续寻找,一直追溯到全局环境的变量对 象,如果 全局变量尚没有找到,则意味着此变量尚未声明
三,垃圾收集
1,标记清除
变量进入环境时被标记进入环境,离开时被标记离开环境
2,引用计数
跟踪记录每个值被引用的次数,释放引用次数为0的值所占的内存
循环引用的时候会出现问题
3,性能问题
4,管理内存
一旦数据不在使用,将其设置为null,解除引用
js的变量,作用域,内存的更多相关文章
- js的变量作用域
js不支持块级变量作用域,而是包含它们的函数的作用域, 例如: function query() { ; ; i < ; i++) { var b = i; } return b + a; } ...
- js学习--变量作用域和作用域链
作为一名菜鸟的我,每天学点的感觉还是不错的.今天学习闭包的过程中看到作用域与作用域链这两个概念,我觉得作为一名有追求的小白,有必要详细了解下. 变量的作用域 就js变量而言,有全局变量和局部变量.这里 ...
- js的变量作用域 ,变量提升
(function(){ a = 5; alert(window.a); var a = 10; alert(a); })(); 结果: undefined 10 代码等同于下面 var a = un ...
- 《JavaScript 高级程序设计》读书笔记四 变量 作用域 内存
一 变量(基本类型和引用类型) a.基本类型保存值,保存在栈内存,引用类型保存指针,保存在堆内存: b.所有函数的参数都是按值进行传递的,不管参数是何种类型: c.检测类型 typeof ...
- #9.6课堂JS总结#变量作用域 date()对象 math()对象
一.变量的作用域 1.JavaScript的作用域链 首先看下下面这段代码: <script type="text/javascript"> var rain = 1; ...
- js声明变量作用域会提前
var s = 1; function test() { console.info(s); var s = 2; console.info(s); } test(); >>>unde ...
- javaScript的闭包 js变量作用域
js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...
- 解释JS变量作用域的范例
JS的变量作用域只有两种:全局作用域与函数作用域. 用var声明的变量不能简单的说是属于函数作用域,应该是说属于其最近的作用域. var a = 10; function test(){ var a; ...
- 有关js的变量、作用域和内存问题
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(四) js共有5种基本数据类型:Undefined.NULL.Boolean.Numbe ...
- js 变量 作用域及内存
由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...
随机推荐
- kaggle新手如何在平台学习大神的代码
原创:数据臭皮匠 [导读]Kaggle ,作为听说它很牛X但从未接触过的同学,可能仅仅了解这是一个参加数据挖掘比赛的网站,殊不知Kaggle也会有赛题相关的数据集, 比如我们熟知的房价预测.泰坦尼克 ...
- 集成Redis缓存
一.简介 1.场景 由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页数据缓存到redis中,减少数据库压力和提高访问速度. 2.RedisTemplate Jedis是Redi ...
- java实现Excel定制导出(基于POI的工具类)
我的需求: 项目中有一些工程表格需要导出,设计到行列合并,定制样式,原有工具类冗余,内聚性强.所以想写一个可以随意定制excel的工具类,工具类满足需求: 对于常用的工程表格有模板格式,可以任意插拔. ...
- mysql(连接查询和数据库设计)
--创建学生表 create table students ( id int unsigned not null auto_increment primary key, name varchar(20 ...
- 成功解决Git:fatal: refusing to merge unrelated histories
Get 报错 如果合并了两个不同的开始提交的仓库,在新的 git 会发现这两个仓库可能不是同一个,为了防止开发者上传错误,于是就给下面的提示 fatal: refusing to merge unre ...
- Java Web工作原理
解析HTTP协议 HTTP:超文本传输协议(HyperText Transfer Protocol) HTTP是一种无状态的协议,意思是指在Web浏览器和Web服务器之间不需要建立持久的连接. HTT ...
- Linux环境Hive安装配置及使用
Linux环境Hive安装配置及使用 一.Hive Hive环境前提 二.Hive架构原理解析 三.Hive-1.2.2单机安装流程 (1) 解压apache-hive-1.2.2-bin.tar.g ...
- Java实现发送HTTP的POST请求,返回数据以及请求状态
/** * @param url:请求url * @param content: 请求体(参数) * @return errorStr:错误信息;status:状态码,response:返回数据 */ ...
- java导出xls
package com.spring.mvc.xls; import java.io.File;import java.io.FileInputStream;import java.text.Deci ...
- 8. Linux重要的环境变量
1.Linux 系统执行命令的4个步骤 第 1 步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行. 第 2 步:Linux 系统检查用户输入的命令是否为& ...