JavaScript高级程序设计学习总结二(JavaScript复杂的变量与内存问题)

JavaScript高级程序设计(第4版)知识点总结 介绍 JavaScript高级程序设计 第四版,在第三版的基础上添加了ES6相关的内容。如let、const关键字,Fetch API、工作者线程、模块、Promise 等。适合具有一定编程经验的 Web 应用开发人员阅读。 下面介绍一下各章节的知识点。 第1章 JavaScript概述 这章节主要讲解JavaScript历史回顾,它是在1995年由网景公司的 Brendan Eich 工程师开发的 JavaScript 1.0,1997 年,JavaScript 1.1 作为提案提交给 Ecma。TC 阅读详情

JavaScript变量是松散类型,这一本质不存在定义某个变量必须保存何种数据类型的规则,变量的值及其数据类型可以再脚本的生命周期内改变。

ECMAScript变量可能包含两种不同类型的值:基本类型值和引用类型值。

基本类型值:保存在栈中的简单数据段。

引用类型值:地址保存在栈中,内容保存在堆中的对象。

基本类型值和引用类型值在复制的过程中差别很大,复制一个基本类型值,会在栈中创建一个新值,然后把新值复制到一个新变量分配的位置上;复制一个引用类型值,是在栈中复制一份到另外一个分配空间中,但是复制的是指针,两个变量都指向同一个对象。这就是其中的区别

                                                

            图2.1 基本类型值的复制  

          图2.2 引用类型值的复制 

ECMAScript中所有的函数参数都是按值传递的。基本类型值按基本类型的复制方式,引用类型值按照引用类型复制。

 

 

检测类型

检测一个变量类型时,typeof是很好的工具,但是检测引用类型时就需要instanceof操作符,使用如下:

result = variable instanceof constructor

alert(person instanceof Object) //person 是Object 吗?  ture

instanceof 检测基本类型的时候永远是false ,因为不是对象。

执行环境和作用域

每一个执行环境都有一个与之关联的变量对象,环境中所有变量和函数都半寸在这个对象中。

每个函数都有自己的执行环境,当进入函数的时候,函数环境会被推入一个环境栈中,函数执行完之后,栈将环境弹出,吧控制权给之前的执行环境。

代码在环境中执行,产生一个作用域链,保证对所有变量和函数的有权访问。

JavaScript没得块作用域 

if(true){
    var color = "blue";
}
alert(color);   //blue

在JavaScript中,if 语句中的变量添加到当前的执行环境中(这里是全局的),使用if 语句一定要记住。

在JavaScript中,for循环结束后变量在外部也存在。

function add(num1 ,num2 ){
     sum = num1+num2;
     return sum;
}
var result = add(10,20);   //30
alert(sum);   //30

函数中变量环境是函数局部变量,但是如果没有声明就是全局的变量,如代码所示,sum是全局的变量。

垃圾收集

JavaScript具有自动垃圾收集机制,

离开作用域的值将会自动标记为可回收,下次再垃圾收集期间会被删除。

“标记清除”是目前主流的垃圾收集算法,另一中是“引用计数”跟踪所有值的引用次数,IE中DOM就是这种,但是容易导致错误。

解除变量引用不仅对消除循环引用有用,对垃圾收集也有好处,保证回收内存,应该及时解除不用的全局对象,对象属性。

Qt应用软件【协议篇】自定义协议处理串口半包贴包 Qt串口数据,半包,贴包,丢包数据处理 阅读详情

相关推荐

使用CAPL实现DoIP刷写

本文介绍了使用CAPL实现基于DoIP协议的ECU刷写方法,包含完整源码。

qq_56033302的博客 2760

JavaScript中的变量、作用域、和内存问题

前言 最近开始入坑js“圣经”之一的《JavaScript高级程序设计》,准备深入学习这门“博大精深”的语言,下面我学习第四章的总结及拓展。 目录 变量 js中声明变量的几种方式 var:可以声明任意类型的变量,js会根据变量的值来自动判定这个值是什么类型 function:主要是声明函数类型的变量,如定义一个函数 啥也不加直接写变量 下面是es6声明变量的方式 let:和var作用一样...

老曹的博客 260

Windows下Maven环境变量配置避坑指南:解决‘mvn‘不被识别问题

本文详细解析了Windows系统中配置Maven环境变量时常见的'mvn'不被识别问题,特别是当系统提示“无法将‘mvn’项识别为cmdlet、函数、脚本文件或可运行程序的名称”时的解决方案。文章从问题根源入手,提供了清晰的配置步骤、深入的排查方法以及针对PowerShell的特殊处理,旨在帮助开发者彻底解决环境变量配置难题,确保Maven命令正常使用。

weixin_28826961的博客 389

【亲测免费】 探索JavaScript的深度与广度:《JavaScript高级程序设计(第四版)》PDF中文版推荐

在编程的世界里,JavaScript无疑是一门不可或缺的语言。无论你是前端开发的新手,还是寻求进阶的资深开发者,掌握JavaScript的高级技术都是提升技能的关键。《JavaScript高级程序设计(第四版)》由Nicholas C. Zakas编著,是一本深入浅出地讲解JavaScript核心概念和高级技术的权威书籍。现在,我们自豪地提供了这本书的中文版PDF文件,让你能够更轻松地深入学习Ja

gitblog_09800的博客 1187

Python 驱动 CAD 二次开发:从零搭建自动化绘图环境

本文详细介绍了如何利用Python进行CAD二次开发,实现自动化绘图。通过win32com库建立Python与CAD软件的通信,文章从环境搭建、连接CAD、操作文档到核心绘图与批量处理,提供了完整的实战指南。该方法能显著提升机械设计、建筑绘图等领域的重复性工作效率,将创造力从繁琐劳动中解放出来。

weixin_29093169的博客 1230

用 Coze 打造纯自动化 AI 情报助手

本文将引导您逐步构建一个简易的AI情报助手,从提示词到工作流,再到卡片消息,详细讲解了如何利用Coze平台开发自动化工具。过程简单易懂,何不亲自动手一试?如果您对此类内容感兴趣,敬请关注本作者。未来,我将带来更多精彩的AI工具教程,助您迅速掌握各类AI应用。在这个AI时代,让您领先一步。t=O83A2AGI.NET AI 教程 震撼!用 Coze 打造纯自动化 AI 情报助手震撼!

xinzhaobuxuan的博客 2531

JavaScript高级程序设计

这是我对《JavaScript高级程序设计》的详细学习笔记,主要内容包括html中的JavaScript,变量基础,变量、作用域与内存,基本引用类型、集合引用类型,迭代器与生成器,对象、类与面向对象编程,函数,期约与异步函数,BOM,DOM,DOM扩展,DOM2和DOM3,事件......

hello_helloworld的博客 7889

淘宝扫码登录避坑指南:如何避免异地登录风控并稳定获取Cookie(附Python代码)

本文深入解析了淘宝扫码登录的风控机制,提供了从环境仿真到代码实现的完整避坑指南。通过精细化伪装请求头、管理会话与IP策略,并附上Python示例代码,帮助开发者稳定获取Cookie,有效避免异地登录风控,实现自动化流程的可靠集成。

l6m7n8的博客 590

《javascript高级程序设计》,javascript高级编程设计

5种基本数据类型:string, number,Boolean,undefined,null复杂数据类型:object声明未赋值为undefined,未声明的变量只能进行一种操作:用typeof检测数据类型为undefined,但它确实不等于undefined2.nullnull是一个空对象指针,所以,undefined派生于null,所以但bool值为false的情况:空字串,0和nan,null,undefined3.number。

阿发狗伪原创 254

自然语言处理NLP星空智能对话机器人系列:Gavin大咖 Transformer 101问答集 第一问

自然语言处理NLP星空智能对话机器人系列:Transformer 101问答 [让天下没有难学的Transformer] 你问我答系列之一 Gavin大咖第一问: Transformer中的可训练Queries、Keys和Values矩阵从哪儿来? 以上是智华解答,供同学们参考。 星空智能对话机器人系列博客 NLP星空智能对话机器人系列:第二次星空智能对话机器人Zoom线上演示安排 NLP星空智能对话机器人系列:StarSpace: Embed All The Things NLP星空智能对

大模型与Agent智能体 991

QtQuick QML教程(2):qml语法介绍

​ qml一个普通的文本文件,后缀是.qml, 一个qml文件主要由两部分组成:(1) import语句 :这个就像C++中的头文件, 使用 import 导入qml需要的相关模块,可以查询Qt文档进行导入,注意每个版本的Qt模块声明可能都不同,相比于QWidget项目,QtQuick的变动是很大的;(2) QML对象树 :根对象是Window, 然后可以在Window中添加各种控件,例如按钮,文本,菜单等。

琅嬛福地 551

【免费下载】 JavaScript高级程序设计(第四版)中文版 PDF 下载指南

JavaScript高级程序设计(第四版)中文版 PDF 下载指南 【下载地址】JavaScript高级程序设计第四版中文版PDF下载指南 JavaScript高级程序设计(第四版)中文版 PDF 下载指南欢迎来到JavaScript学习资源库!这里我们自豪地提供了《JavaScript高级程序设计》第四版的中文版PDF...

gitblog_09744的博客 1918

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JavaScript高级——数据、变量、内存相关问题、对象、函数

JavaScript高级数据、变量、内存相关问题对象函数IIFE原型和原型链原型原型链instanceof 数据、变量、内存相关问题 undefined与null的区别? undefined代表定义未赋值,null表示定义了也赋值了,值为null 什么时候给变量赋值null? 初始赋值,表明将要赋值为对象,结束前,让对象成为垃圾对象。 严格区别变量类型与数据类型 数据类型:- 基本数据类型:String、Nubmer、boolean、undefined、null     &n

xiaotangyu7dong的博客 752

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JavaScript高级程序设计(红宝书)学习笔记

(:介绍了一些很宏观大概的与JS相关的内容,浮光掠影地过了一遍,对JS的定义和大概版本兼容组成有了一些认识。JavaScript是一种专为网页交互设计的脚本语言,由下列三种不同部分组成:①ECMAScript,提供核心语言功能②文档对象模型(DOM),提供访问和操作网页内容的方法和接口③浏览器对象模型(BOM),提供与浏览器交互的方法和接口。

m0_63882057的博客 1924

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JavaScript高级程序设计 读书笔记

本文摘要介绍了JavaScript的基础知识,包括其构成、HTML中的使用方式、基本概念以及变量和作用域等内容。JavaScript由ECMAScript标准实现,在HTML中需注意脚本位置对渲染性能的影响。文章详细讲解了数据类型、变量声明、严格模式、数值转换函数、字符串特性以及各种操作符的使用规则,特别强调了全等操作符的优势。最后指出JavaScript中所有参数均为值传递,并解释了基本数据类型与对象复制时的区别。这些基础知识为后续深入学习JavaScript奠定了基础。

SteveJrong's Blog 1054

js中的数据、内存和变量

  今天就说一说js中的数据、内存和变量吧。之前一直对变量关注的比较多,而忽视了内存和数据以及它们三者之间的关系,今天就在这里补一波。 一、js中的数据指的是什么?   数据在人们眼中向来都是一个非常抽象的事物,它无处不在,但是我们总是不知道怎么去描述它。而js中的数据,我认为它是指:在内存中可读的, 可传递的、保存了特定信息的“东西”,是我们在内存中所操作的目标。一个函数是数据、一个常量...

Wayne1998的博客 3241

JS高级(1)——数据、变量与内存

文章目录数据-变量-内存什么是数据?什么是内存?什么是变量?内存-数据-变量三者之间的关系相关问题对象函数回调函数IIFE(匿名函数)函数中的this补充分号问题 数据-变量-内存 什么是数据? 存储在内存中代表特定信息的东西,本质上是0101… 数据的特点:可传递,可运算。 一切皆数据。 内存中所有的操作目标:数据。(算术运算、逻辑运算、赋值、运行函数) 什么是内存? 内存条通电以后产生的可存储数据的空间(临时的) 内存产生和死亡:内存条(电路板)==> 通电 ==> 产生内存空间 ==&gt

weixin_46351593的博客 236

JavaScript高级程序设计(第5版):程序中的数据表达

本文介绍了JavaScript中变量的定义、作用域以及数据类型等基础知识。通过这些内容的讲解,帮助读者更好地理解JavaScript的基本概念和应用。

灵感干货铺 1304

《javascript高级程序设计》,javascript高级程序编程

大家好,本文将围绕javascript高级程序设计和权威指南两本书展开说明,javascript高级程序设计 javascript权威指南是一个很多人都想弄明白的事情,想搞清楚javascript高级程序设计这本书怎么样需要先了解以下几个事情。JavaScript诞生于1995年,最早的作用是在本地客户端处理数据验证。作者认为要想完全的理解和掌握JavaScript,关键在于弄清它的本质,历史和局限性。1997年制定标准ECMA-262的ECMAScript标准1.2 JavaScript的实现。

chatgpt001的博客 253

JavaScript高级-数据、变量、内存的定义与联系

1.定义 什么是数据? 存储在内容中代表特定信息的二进制编码,本质为01001… 数据的特点:可传递,可运算 一切皆数据 内存中所有操作的目标:数据 算术运算 逻辑运算 赋值 运行函数 什么是内存? 内存条通电后产生的可存储数据的空间(临时的) 内存的产生和死亡:内存条(电路板)>通电>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失 一块内存中包含 内部存储的数据 地址值 内存分类 栈:全局变量/局部变量 堆:对象

zzming的博客 308

【前端】JavaScript 变量引用、内存与数组赋值:深入解析三种情景

变量赋值与引用:赋值为引用数据类型时,变量保存的是内存地址,而不是数据本身。因此,重新赋值并不会影响其他引用该数据的变量。 内存模型:JavaScript 中,栈内存用于存储基本类型和引用地址,而堆内存用于存储复杂对象的内容。对引用对象的操作会影响到所有指向该内存地址的变量。 修改数组内容与重新赋值:直接修改数组的内容会影响所有引用该数组的变量,而重新赋值则会让变量指向一个新的对象,不影响其他引用。 2024.11.20-✍

禅宗里有一个词叫做“因缘和合”。 所谓因缘,是指事件要发生所必须的条件。因缘和合就是当你聚集了这件事的一切条件,它就会自然而然的发生。“它就会自然而然的发生”,这种朴素而坚定的价值观让我们感到无比安心,安心到可以不用有任何担心焦虑。 1286

《JavaScript 高级程序设计》学习笔记

我学习前端大概有三个月了,最近开始看这本比较厚的书,内容非常详细,很难完全记住。 因此我将书中的知识点记录下来,方便日后查阅。 第1章 JavaScript简介 1.1 JavaScript 简史 1.2 JavaScript 实现 1.2.1 核心(ECMAScript) 1.2.2 文档对象模型(DOM) 1.2.3 浏览器对象模型(BOM) 1.3 JavaScript 版本 1.4 小...

卡不加奇诺的博客 257

JavaScript【JS语法与变量】

前端语言:处理界面(HTML、CSS、JavaScript、……)后端语言:处理数据(Java、PHP、Python、Go、……)(浏览器)前端 <———— HTTP 协议 ————> 后端(服务器)传统的 JS 是一门前端语言,只能运行在浏览器端,不能在服务器端处理数据,且不能独立于浏览器存在,不能脱离 HTML!在 2009 年,诞生了 Node.js,这是一个 JavaScript 的服务端运行平台。

qq_64183220的博客 889

【JS】JavaScript入门笔记第七弹之JS简单类型与复杂类型~

JavaScript入门笔记第七弹之JS简单类型与复杂类型

森姐姐的博客 682

JavaScript 高级程序设计 读书笔记(第三章)

在 JavaScript 的世界里,第三章的内容可以说是奠基石,它决定了你对这门语言的基本理解。JavaScript 是弱类型语言,类型转换是家常便饭。以上就是第三章的读书笔记,下一篇我们深入解析第四章,聊聊变量、作用域和垃圾回收!严格模式可以让 JavaScript 变得更加严格,避免一些潜在的错误。在严格模式下,未声明的变量不能被赋值,防止意外创建全局变量。而一脸问号,那么恭喜你,这一章就是为你准备的。声明的变量不会被提升,访问前必须声明。声明的变量会被提升,但不会赋值。只是值的拷贝,所以修改。

dorabighead的博客 1162

js高级程序设计(二) —— js基础

1、变量 ① ECMAScript中的一切(变量、函数名和操作符)都区分大小写。 ② 用var声明变量;省略 var 操作符,会创建一个全局变量。 ③ 变量类型:基本类型和引用类型(Object) 2、数据类型 ① 5种简单(基本)数据类型:Undefined、Null、Boolean、Number 和String 一种复杂数据类型:Object ② 对于尚未声明过的变量,只能执行一项操作,即使用 typeof 操作符检测其数据类型。 ③ 数据类型判断及其转换。 3、...

weixin_42756155的博客 247
上一篇: JavaScript高级程序设计学习总结一(基本概念总结)
下一篇: Android的Margin和Padding属性以及支持的长度单位
Richard__su
博客等级 码龄15年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值