今天主要讲一下,JS底层的一些东西,这些东西不太好举例(应该是我水平不够) 望大家多多海涵,比心心 执行环境 执行环境(执行上下文,全文使用执行环境 )是JS中最为重要的一个概念,执行环境决定了,变量或函数有权访问的其他数据,并决定了其各自行为. 跟执行环境直接相关的是变量对象 JS在执行环境中定义的所有变量和函数都保存在该对象上. 对于该对象,我们无法使用代码来进行访问,但是JS解析器在进行数据处理时会在后台对该变量对象进行访问. 全局执行环境 全局执行环境是JS代码的最外围的执行环境,在JS…
前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就保存了对这个函数的引用 function与表达式的区别前文也已经详细分析过,这里就大概讲解一下 虽然两者在写法上没有什么不同,但是function关键字作为函数声明的时候,与var一样会有变量提升的效果 其本质是在JS创建执行环境的时候,就完成了对函数的声明,所以访问该函数的代码在函数声明语句前就可…
昨天介绍了,JS中函数的作用域 什么词法环境之类的,可能很多小伙伴不太明白. 在今天的内容开始之前,先做个简短的声明: 词法环境这一概念是在ES5中提出的,因为词法环境主要用于保存let.const声明的变量.函数 而在ES3中对变量相关的信息都保存在变量对象上: 从功能上来说变量对象可以看作是词法环境中的环境记录 两者从功能上来说区别不大,只是不同版本的ES有不同的说法 为了保持与前文的一致,这篇文章中我还是用环境记录来描述JS保存当前执行环境(上下文)中定义的变量和函数的对象 ES6之前JS…
前几天有事耽搁了,今天继续更新 今天的主要内容是JS中的函数 这一篇主要讲函数的定义等内容,至于变量提升.执行环境.闭包.内存回收等内容在后面讲,高玩们可以不用看下面的正文了. 函数 首先来讲,函数对于任何编程语言都是一个十分核心的概念. Js中的函数通过function关键字来声明函数,函数用于封装任意多条语句,可以让我们用函数来来实现某一特定功能,避免编写重复的代码. 使用方法如下: function 函数名(参数){ // 要执行的代码块 } 跟其他语言中的函数相比JS中的函数存在以下特征…
基本包装类 基本包装类这个概念或许有的小伙伴没有听说过 但是小伙伴们有没有想过,为什么基本数据类型的实例也有方法呢? 其实这些方法都来自基本包装类型 这是JS为了方便操作基础数据类型而创建的特殊引用类型 基本包装类有三种 1. Boolean类型 2. Number类型 3. String类型 执行过程 这三种基本包装类型的生命周期很短,只存在于代码执行的一瞬间 当这三种基本数据类型调用其基本包装类的方法时: 1.读取以上三种类型的基本数据类型时 2.创建一个基本包装类的实例 3.调用该实例上的…
JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引用类型都拥有属性和方法 正是由于这个原因,函数名实际上就是一个指针,指向函数对象,并不会与函数绑定 函数的声明 创建一个函数一般来说有下面几种方法 // function关键字声明 function sayHello(){ alert("hello"); } // 函数表达式 var sa…
除了Object类型之外ECMA中最常用的引用类型可能就是Array类型了 并且ECMA中的数组类型和其他大多数编程语言的数组类型存在着很大的区别 今天就介绍一下JS中的Array的特别之处 区别 1. JS中的数组类型可以存储任意类型的数据(其他语言中一般来说只能存储固定类型的数据) 2. 数组的大小是动态调整的,也就是说你数组中的元素的大小有多大,数组的大小就有多大 3.length属性可写,与一些面向对象的语言不同,JS数组的length属性可写,就是说我们可以通过length属性来移除数…
垃圾回收机制 垃圾回收机制,是保证脚本能长时间运行的重要机制 JS具有自动垃圾收集机制,也就是说执行环境会负责管理代码执行过程中使用的内存 与一些偏底层的语言(c.c++)不同,我们不需要手工地去管理内存的使用情况 因为JS替我们完成了需要内存的分配,以及无用内存的回收,然后释放其占用的内存. 其原理其实很简单,就是找出那些不再使用的内存释放掉就行,所以垃圾收集器会按照固定时间间隔来执行该操作 垃圾回收是针对局部变量的,因为全局变量会在浏览器关闭后自动释放内存,而局部变量不同,其只会在函数执行期…
接着昨天的文章,今天这篇文章主要讲述JS中剩余的两种数据类型String,和Object String类型 对于该类型,书中给出的解释为:由0或多个16为Unicode字符组成的字符序列. 对于JS中的String类型首先要明确的是,在JS中单引号,和双引号是没有区别的,跟PHP及部分语言单双引号会影响对字符串的解释不同. 虽然单双引号没有什么不同,但是要保证引号的闭合,即你不能用单引号开头,双引号结尾. 这一特点在es6的模板字符串出来之前,能使我们对字符串的拼接简单许多. 比如,在JS中操作…
什么是内置对象呢? js高级程序设计中给出的定义为:由ES规定不依赖于宿主环境的对象,这些对象在JS执行前就已经存在 前面我们介绍的引用类型都是内置对象 除了这些对象外ECMA还规定了两个单体内置对象:1.Global 2.Math Global对象 Global对象十分特别,从某种意义上来说他是一个背锅侠 因为凡是不属于任何对象的属性和方法最后都将成为Global对象的属性和方法 也就是说在JS中凡是全局变量和全局方法实际上都是Global对象的属性和方法(包括isFinite等方法也是) G…