博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js高级教程阅读笔记 第四章-变量作用域和内存问题
阅读量:7209 次
发布时间:2019-06-29

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

本章核心

  • 理解基本类型和引用类型
  • 理解执行环境
  • 理解垃圾搜集

基本类型和引用类型的值

  • 基本类型:简单的数据段
  • 引用类型:多个值构成的对象

js中引用类型的值是存放在内存中的对象,但是js不允许访问内存控件,所以只能以引用的方式访问

可以给引用对象添加(删除)新的属性和方法,但是不能用在基本类型上(尽管不会报错,但是返回值是undefined)。

var `teacher = new object();teacher.name = '李';`
var name = '李';name.age = 11; //不会报错,但是返回值undefined

复制变量值

在基本类型中,值的复制类似于创建副本

var a = 1;var b = a; //这个时候虽然二者的值都为1,但是二者都是独立的1,开辟的是不同的内存空间

但是对于引用类型就不同了,这更像是c语言中的指针。以实例来说明

var a = new object();var b = a;a.name='zhang';alert(b.name);

结果也是zhang。实际上引用类型创建的是指针,所以a复制给b实际上是把指针备份了一份给b。它们面对的都是同一个对象。

引用可以是多引用,即一个引用类型可以new多个对象。(前提是其中有对象是在局部中)。

检测类型

前面提到检测基本类型的方式是使用typeof,那么对于引用类型来说就需要instanceof,语法如下

result = var instanceof constructure ;

实例:

alert( person instanceof Object)//检验person是否是object类型

执行环境和作用域

在web浏览器中全局执行环境被认为是window对象。(这个和宿主环境有关系)

局部作用域定义的变量可以和全局变量交换使用。

在运行的时候,js会形成一条作用链,作用链串起所有方法和变量。

没有块级作用域:

if(1){    var a = 1;}alert(a);//通常在其他c类语言中{}表示了一个作用域,一旦离开即被销毁。但是js中没有这样做,a在{}中被创建就被添加到了执行环境中。

垃圾搜集

js采用了垃圾回收机制

转载于:https://www.cnblogs.com/comefuture/p/8305960.html

你可能感兴趣的文章
Java编程基础04——流程控制语句
查看>>
vue-threeJS数据驱动的三维图形可视化
查看>>
Ubuntu 18.04.1 搭建Java环境和HelloWorld
查看>>
Flutter 实现根据环境加载不同配置
查看>>
浏览器保存密码后自动填充问题
查看>>
前端每日实战:93# 视频演示如何用纯 CSS 创作一根闪电连接线
查看>>
PhpStorm升级后调用某些类提示phpstorm Unhandled exceptions
查看>>
Python 2.x 与 Python 3.x 的区别
查看>>
如何实现对tcl脚本的类GDB调试
查看>>
基于java的IO流的文件读取系统
查看>>
谈谈 Docker 网络
查看>>
laravel-admin集成ueditor编辑器的图片列表显示问题解决方法
查看>>
伪数组(ArrayLike)
查看>>
ES6精华:字符串扩展
查看>>
写在Flutter 1.0之前
查看>>
智能媒体管理产品文档转换/预览功能介绍(4)--快速搭建
查看>>
移动端H5周历组件
查看>>
Python 初体验
查看>>
使用jenkins进行持续集成
查看>>
js算法入门(3)--递归
查看>>