js高级程序设计(4/5章节)

1.对执行环境的理解

javascript 复制代码
 执行环境分为局部环境和全局环境,这个是一个线性的作用域链,全局环境位于链的末尾,当前环境位于链的开始。比如说在函数中嵌套函数,内层函数的环境就会处在作用域链的开始,如果要访问外层函数的变量对象,作用域会沿着该链向上搜索要访问的变量对象,直到找到window对象(全局对象)。总结一句话:在局部环境中可以访问全局环境中的变量对象,颠倒过来则不成立。
 

2.if和for中的局部变量

复制代码
由于JavaScript中没有块级作用域这一概念,所以在像if和for循环语句中定义的局部变量,在执行完这些代码后定义的局部变量并不会立即销毁,而是保存在当前的作用域中,即在if和for循环之外仍然可以访问这些局部变量。

3.对于垃圾回收机制的简单认识

vbnet 复制代码
 在执行环境中,当变量不在使用时,可以通过'标记清除'的策略进行垃圾回收,给这些白能量加上标签,在垃圾收集器运行的时候,销毁它的值,释放其占用的内存,这样来提高网络的性能,防止因为内存占用过多导致的系统性能下降甚至崩溃。
 还有一种是'引用计数'的垃圾回收机制策略,这种策略会导致循环计数,由于对这个的理解不是太清楚,只是看到在互相引用时,回导致计数值永远不会为0,也就是说永远不可能回收其内存,这种方法目前已不被使用。
 

4.创建对象的三种方式

javascript 复制代码
(1)使用new关键字加上Object构造函数进行创建,再通过打点去创建,如:var obj = new Object(); obj.name = 'cs';
(2)通过字面量的方法进行创建,如:var obj = {name: 'cs'}
(3)可以通过一个空的对象字面量,再通过打点去创建,如:var obj = {}; obj.name = 'cs';
 总结:在后两种以字面量进行创建对象的同时,并不会再去调用Object的构造函数。

5.获取对象的属性值得两种方式

css 复制代码
(1)可以通过打点方式获取,但是打点后面的属性名不能是数字
(2)可以通过'[]'方式去获取属性的值,这里面可以放变量,或者字符串的属性名,并且变量的值可以为数字或者其它,它使用的扩展性更强,一般很少使用。

6.创建数组的两种方式

javascript 复制代码
(1)可以通过new关键字,并且调用Array的构造函数进行创建,如:var arr = new Array();
(2)可以通过字面量的方式进行创建,如:var arr = [];这种创建方式并不会去调用Array的构造函数

7.对数组length属性的认识

css 复制代码
 针对看到的length属性的特点,它不仅仅可以计算数组的长度,还可以对数组的元素在数组的末尾进行移除或者增加。比如数组的长度为3,即var arr = [1, 2, 3];可以通过设置数组的属性length,arr.length = 2;这样再去访问arr[3]的时候就会变为undefined。同样如果对之前的数组长度设置为arr.length = 100;那么arr[3]到arr[99]都是undefined。
 

8.检测数组类型的方式

javascript 复制代码
 (1)使用instanceof操作符,如:a instanceof Array会返回布尔值,但是他有个局限,就是用在单一的全局执行环境中,如果一个网页上有个框架,那么可能就会有多个全局执行环境,那么这时就会有多个不同的Array构造函数,就不适用了。
 (2)对于有多个全局执行环境和构造函数而言,可以使用Array.isArray(a)来判断a的值是不是数组,它的返回结果也是布尔值。
 

9.为数组添加和移除新的元素

scss 复制代码
 (1)push()和pop(),这两个方法是从数组的末尾操作数组元素,push()可以传入多个值,返回的时传入参数之后的数组长度,pop返回的是移除数组的那个元素。
 (2)unshift()和shift(),这是在数组的开头进行操作数组元素的方法,同样,unshift()也可以传入多个参数,返回的是传入参数之后的长度,shift()是从数组的开头移除数组元素,返回的是移除的元素。
相关推荐
RadiumAg1 小时前
记一道有趣的面试题
前端·javascript
yangzhi_emo2 小时前
ES6笔记2
开发语言·前端·javascript
yanlele2 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
烛阴3 小时前
void 0 的奥秘:解锁 JavaScript 中 undefined 的正确打开方式
前端·javascript
初遇你时动了情3 小时前
腾讯地图 vue3 使用 封装 地图组件
javascript·vue.js·腾讯地图
dssxyz3 小时前
uniapp打包微信小程序主包过大问题_uniapp 微信小程序时主包太大和vendor.js过大
javascript·微信小程序·uni-app
ohMyGod_1236 小时前
React16,17,18,19新特性更新对比
前端·javascript·react.js
@大迁世界6 小时前
第1章 React组件开发基础
前端·javascript·react.js·前端框架·ecmascript
一瓣橙子6 小时前
7.7日 实验03-Spark批处理开发(2)
开发语言·javascript·ajax
Hilaku6 小时前
从一个实战项目,看懂 `new DataTransfer()` 的三大妙用
前端·javascript·jquery