第三章Javascript的核心概念
Javascript的核心语言特性在ECMA-262中是以名为ECMAScript的伪语言的形式来定义的。
(1)ECMAScript中的基本数据类型包括Undefined、Null、Boolean、Number和String。
(2)与其他语言不同,ECMAscript没有为整数和浮点数值分别定义不同的数据类型,Number类型可以用于表达所有数值。
(3)ECMAScript中也有一种复杂的数据类型,即Object类型,该类型是这门语言中所有对象的基础类型。
(4)严格模式为这门语言中容易出错的地方施加了限制。(“use strict”)
(5)ECMAScript提供了很多与C及其他类C语言中相同的基本操作符,包括算数操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等。
(6)ECMAScript从其他语言中借鉴了很多流控制语句,如if语句、for语句和switch语句等。
ECMAScript中的函数与其他语言中的函数有诸多不同之处。
(1)无须指定函数的返回值,因为任何ECMAScript都可以在任何时候返回任何值。
(2)实际上,未指定返回值的函数返回的是一个特殊的undefined值。
(3)ECMAScript中也没有函数签名的概念,因为其参数是以一个包含零或多个值的数组形式传递的。
(4)可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数。
(5)由于不存在函数签名的特性,ECMAScript函数不能重载。
第4章变量作用域和内存问题
javascript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已。
4.1 基本类型和应用类型的值
与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。
ECMAScript中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型的值的传递如同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样。
typeof操作符是确定一个变量是字符串、数值、布尔值,还是undefined的最佳工具。
ECMAScript提供了instanceof操作符,其语法如下:
result=variable instanceof constructor
如果变量是给定的引用类型(根据它的原型链来识别)的实例,那么instanceof操作符就会返回true。
4.2 执行环境及作用域
执行环境(execution context,为简单起见,有时候也称为“环境”)是JavaScript中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。
每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权交给之前的执行环境。ECMAScript程序中的执行流正是由这个方便的机制控制着。
4.2.1 延长作用域链
虽然执行环境的类型总共只有两种——全局和局部(函数),但还是有其他办法来延长作用域链。这么说是因为有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行后被移除。在两种情况下会发送这种现象。具体来说,就是当执行流进入下列任何一个语句时,作用域链就会得到加长:
(1)try-catch语句的catch块。
(2)with语句。
这两个语句都会在作用域链的前端添加一个变量对象。对with语句来说,会将指定的对象添加到作用域链中。对catch语句来说,会创建一个新的变量对象,其中包含的是被抛出的错误对象的声明。
4.2.2 没有块级作用域
JavaScript没有块级作用域经常会导致理解上的困惑。
1.声明变量
使用var声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境就是函数的局部环境;在with语句中,最接近的环境是函数环境。如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境。
2.查询标识符
当某个环境中为了读取或写入而引用了一个标识符时,必须通过搜索来确定该标识符实际代表什么。搜索过程从作用域链的前端开始,向上逐级查询与给定名字匹配的标识符。如果在局部环境中找到了该标识符,搜索过程停止,变量就绪。如果在局部环境中没有找到该变量名,则继续沿作用域链向上搜索。搜索过程一直追溯到全局环境的变量对象。如果在全局环境中也没有找到这个标识符,则意味着该变量尚未声明。
4.3 垃圾收集
JavaScript具有自动垃圾回收基址,也就是说,执行环境会负责管理代码执行过程中使用的内存。
4.4 小结
JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型值。基本类型的值源自以下5种基本数据类型:Undifined、Null、Boolean、Number和String。
基本类型值和引用类型值具有以下特点:
(1)基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;
(2)从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本。
(3)引用类型的值是对象,保存在堆内存中。
(4)包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针。
(5)从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象;
(6)确定一个值是哪种基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。
所有变量(包括基本类型和引用类型)都存在于一个执行环境(也称为作用域)当中,这个执行环境决定了变量的声明周期,以及哪一部分代码可以访问其中的变量。以下是关于执行环境的几点总结:
(1)执行环境中有全局执行环境(也称为全局环境)和函数执行环境之分。
(2)每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链。
(3)函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境。
(4)全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中定义的任何数据。
(5)变量的执行环境有助于确定应该何时释放内存。
JavaScript是一门具有自动垃圾收集机制的编程语言,开发人员不必关心内存分配和回收问题。
解除变量的引用不仅有助于消除循环引用想象,而且对垃圾收集也有好处。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。
相关推荐
个人Javascript学习笔记 精华版 本资源为个人Javascript学习笔记的精华版,涵盖了Javascript的基础知识、事件处理、对象和系统函数、浏览器对象等方面的内容。下面是对每个知识点的详细说明: 1. 什么是JavaScript...
HTML+CSS+JavaScript教程学习笔记HTML+CSS+JavaScript教程学习笔记 HTML+CSS+JavaScript教程学习笔记HTML+CSS+JavaScript教程学习笔记 HTML+CSS+JavaScript教程学习笔记HTML+CSS+JavaScript教程学习笔记 ...
JavaScript是一种高级的、动态的、基于对象的客户端脚本语言。它是在网页上执行的脚本语言,能实现网页的交互功能。下面是该资源中的重要知识点总结: 一、 JavaScript 基本概念 * JavaScript是一种基于对象的脚本...
以上是JavaScript学习笔记中提到的一些核心知识点,通过对这些知识点的理解和熟练应用,可以为进一步学习和掌握JavaScript打下坚实的基础。在实际开发过程中,结合具体的项目需求,这些知识会得到更深入的拓展和应用...
JavaScript 学习笔记集和代码库JavaScript 学习笔记集和代码库JavaScript 学习笔记集和代码库JavaScript 学习笔记集和代码库JavaScript 学习笔记集和代码库JavaScript 学习笔记集和代码库JavaScript 学习笔记集和...
### JavaScript学习笔记精要 #### JavaScript简介 JavaScript是一种强大的、多用途的脚本语言,用于增强网站的交互性和用户体验。它是由Netscape公司的Brendan Eich在1995年发明的,并且迅速成为了Web开发的标准之...
这份"javascript入门学习笔记"旨在为初学者提供一个全面且深入的JavaScript学习路径。 一、基础语法 JavaScript的基础包括变量、数据类型、操作符、流程控制等。变量用于存储数据,数据类型分为基本类型(如字符串...
本学习笔记将深入探讨JavaScript的核心概念,包括变量、数据类型、操作符、控制流程、函数、对象、数组、原型链、闭包等,并结合实际示例,如my.js、order.js、login.js等文件,来讲解其在实际项目中的应用。...
这份“javascript学习笔记整理知识点整理”是针对初学者的一份宝贵资料,涵盖了JavaScript的基础知识,旨在帮助新手快速入门并掌握这门语言的核心概念。 一、变量与数据类型 在JavaScript中,变量用于存储数据。...
这篇学习笔记主要涵盖了JavaScript的基础语法和客户端JavaScript的相关知识。 1. **JavaScript基本语法**: - **变量声明**:未声明的变量尝试读取时会产生错误,而写入未声明的变量会创建一个全局变量。 - **...
JavaScript学习笔记讲解版参考.pdf是一份详尽的教程,涵盖了从基础到进阶的JavaScript知识。这份笔记首先从CSS样式表开始,引导读者理解网页样式的设置与应用。 1. CSS(Cascading Style Sheets)样式表是用于控制...
JavaScript学习笔记是一本关于JavaScript编程语言的教材,该教材通过丰富的实例,系统地介绍了JavaScript的基础知识和实际应用技巧,帮助读者一步步掌握客户端编程技术。本书共分为九章,每一章都有其特定的主题,...
Javascript学习笔记PPTJavascript学习笔记PPTJavascript学习笔记PPTJavascript学习笔记PPTJavascript学习笔记PPTJavascript学习笔记PPTJavascript学习笔记PPTJavascript学习笔记PPTJavascript学习笔记PPTJavascript...
前端学习笔记网站(HTML5+CSS3+JavaScript前端网页web课程设计).rar前端学习笔记网站(HTML5+CSS3+JavaScript前端网页web课程设计).rar前端学习笔记网站(HTML5+CSS3+JavaScript前端网页web课程设计).rar ...
JavaScript是一种轻量级的解释型编程语言,主要用于网页和网络应用开发。它由网景公司的Brendan Eich在1995年发明,最初设计目的是增强网页的交互性,验证表单数据。JavaScript的运行环境是浏览器,它不需要预编译,...