JavaScript系统学习小结——变量、作用域和内存问题
趁着写完小论文还未彻底消散的学习氛围,开始着重巩固自己JavaScript的基础知识,为秋招做最基本的准备。
- 变量:Js的变量可能保存两种不同数据类型的值:基本类型值和引用类型值。
- 基本类型包括:Undefined,Null,Boolean,Number和String,基本类型是按值访问方式;
- 引用类型的值是对象,是按引用方式引用;
- 在复制变量值时,两种数据类型的差异表现在:
- 复制基本类型值后,创建的是这个值的副本,彼此两个变量可以参与任何操作而不会互相影响;
- 复制引用类型值后,两个变量实际上将引用同一个对象;
- 在作为参数传递时,两种数据类型值的传递分别如同他们各自的赋值规律;尽量把参数想象成局部变量,有助于理解“参数只能按值传递”的概念;
- typeof操作符可以用来检测是哪一种基本数据类型;instanceof操作符可以用来检测是哪一种引用数据类型;
- 作用域(执行环境),作用域决定变量的生命周期:
- 执行环境有全局执行环境和函数执行环境之分(不同其他语言,这里没有语句块的作用域);
- 使用var声明的变量会自动被添加到最接近的环境中,没有使用var声明,该变量会自动被添加到全局环境中;因此初始变量之前,一定要声明;
- 垃圾收集机制的原理是:找出不再继续使用的变量,然后释放其占用的内存。
- 浏览器的具体实现通常有两个策略:标记清除、引用计数;
- “标记清除”是目前主流的收集算法;在IE中访问非原生JS对象(BOM,DOM元素)时,会使用到“引用计数”算法,但会导致一些问题(当代码中存在循环引用现象时);
- 内存
- 优化内存的最佳方式,就是为执行中的代码只保留必要的数据。
- 一旦数据不再有用,最好通过将其设置为null来释放其引用(即“解除引用”方法);这一方法适用于大多数全局变量和全局对象的属性;
- 解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。
- 优化内存的最佳方式,就是为执行中的代码只保留必要的数据。
书本类容范围:《JavaScript高级程序设计》P68-82
JavaScript系统学习小结——变量、作用域和内存问题的更多相关文章
- JavaScript系统学习小结——Object类型、Array类型
今天学习JavaSript中引用变量中的Object类型和Array类型: 1. Js中大多数引用类型值都是Object类型的实例,Object类型在应用程序中存储和传输数据时,是非常理想的选择: 创 ...
- 第一百零六节,JavaScript变量作用域及内存
JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...
- JavaScript解析顺序和变量作用域
JavaScript基础之变量作用域. 一. 1.全局变量:全局变量的意思就是,在代码的不论什么地方都能够訪问到.注意:未定义 直接赋值的变量拥有全局属性. 2.局部变量:局部变量的意思就是,变量的作 ...
- javaScript的闭包 js变量作用域
js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...
- go学习笔记-变量作用域
变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. 变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函数定义中的变量称为形式 ...
- 浅谈javascript中变量作用域和内存(2)
1.无块级作用域 javascript没有块级作用域,这会让其他程序员在理解js代码上很痛苦.在其他很多语言,比如C,大括号括起来的代码块都有自己的作用域 举个例子 if(true) { var na ...
- JavaScript变量作用域和内存问题(二)
执行环境是js中特别重要的概念,是指变量或者函数可以访问其他数据,定义自己的行为.每个执行环境都有一个与之相对应的变量对象,执行环境中定义的所有变量和函数都保存在这个变量中,我们看不到这个变量,但是后 ...
- 浅谈javascript中变量作用域和内存(1)
先理解两个概念:基本类型和引用类型的值 1.基本类型和引用类型的值 (1)定义: 基本类型:指简单的数据段,比如按值访问的js五种基本数据类型undefined.null.boolean.number ...
- javascript高级程序设计第3版——第4章 变量作用域以及内存
随机推荐
- javascript的setTimeout()与setTimeout()方法用法总结
setTimeout与setInterval的区别: setTimeout 定义和用法: setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法: setTimeout(code ...
- JVM高级特性-一、java内存结构区域介绍
区域划分: java虚拟机在执行程序的过程中,将内存分为功能不同的几个区域,如下图: 此图列出了内存划分的各个区域,其中 线程私有的:程序计数器.虚拟机栈.本地方法栈 线程共享的:堆.方法区 下面,逐 ...
- jeecg关闭当前iframe
关闭当前iframe function closeDialog(){ frameElement.api.close();//本方法也行 //或者下面的方式 var win = frameElement ...
- svg制作风车旋转
首先用ai画一个简单的风车 例如: svg代码: <animateTransform attributeName="transform" begin="0s&quo ...
- 9.如何解决出现AXIOS的Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
问题描述: 由于restful接口需要在头部header传递两个字段: Content-Type: application/jsonAccess-Token: 84c6635800b14e0eba4f ...
- 手机cpu结构,arm
问题描述 今天测试人员测试集成版本时除了一个bug:关于华为 Mate 8手机Android 6.0系统运行刚刚提测的版本时,出现闪退的bug,而小米 4 手机Android 6.0系统却没有出现任何 ...
- C++函数重载实现的原理以及为什么在C++中使用用C语言编译的函数时,要在函数名称前面加上extern "C"声明
C++相对于C语言而言支持函数重载是其极大的一个特点,相信在使用C语言的时候大家如果要写一个实现两个整型数据相加的函数还要写一个浮点型数据相加的函数,那么这两个函数的名字绝对不可以一样,这样无疑在我们 ...
- 基于AFN封装的带缓存的网络请求
给大家分享一个基于AFN封装的网络请求 git: https://github.com/zhouxihi/NVNetworking #带缓存机制的网络请求 各类请求有分带缓存 , 不带缓存, 可自定义 ...
- 本地服务器 windows server 2008 datacenter conn /as sysdba 提示 ora-01031 insufficient privileges
原因是需要把当前用户administrator(为例)添加到ora_dba组里. 服务器管理器--配置--本地用户和组--组
- WriteTeacherObj
package JBJADV003;import java.io.*;public class WriteTeacherObj { /** * @param args */ public static ...