javascript笔记(七)
来源:互联网 发布:阿里云 搬瓦工 cn2 编辑:程序博客网 时间:2024/06/06 08:39
错误(bug): 程序执行过程中,导致程序异常中断的问题。
Error: 在错误发生时,保存错误信息的对象
6种:
SyntaxError: 语法错误
ReferenceError: 引用错误,没找到xxx
TypeError: 类型错误,错误的使用了对象的方法。
RangeError: 范围错误,特指参数超范围
EvalError: 错误的使用了eval
URIError: URI错误
创建: Error对象是在错误发生时,由js引擎自动创建。
任何程序在发生错误时,都会强行退出
错误处理: 在程序发生错误时,保证程序不强行退出的机制。
如何处理:
try{
可能出现错误的代码
}catch(err){
只有发生错误时,才执行的错误处理代码
}finally{
无论是否出错,都必须执行的代码
}
效率: 一段正常代码,只要放入try中,执行效率一定降低。
1. try中应仅放可能出现问题的代码
2. 如果可以提前预知的异常处理,都可通过if..else..代替try..catch..
如果无法提前预知的错误,只能用try catch。
解决浏览器兼容性问题:
判断浏览器是否支持Ajax:
try{
new XMLHttpRequest();
document.write("完美支持Ajax");
}catch(err){
document.write("您的浏览器版本太低,不支持Ajax");
}
抛出自定义错误:
何时: 函数的定义者,向函数的调用者,提醒错误的使用了函数。
如何:
定义者:throw new Error("错误提示")
调用者:用if...else或try...catch处理异常。
2.*****Function:
什么是函数对象:封装一个函数定义的对象。
何时使用: 代码重用
创建: 3种:
1.声明: function 函数名(参数列表){
函数体;
return 返回值;
}
强调:被整体声明提前
2.函数直接量:
var 函数名=function(参数列表){...}
强调:函数直接量不会被声明提前
何时使用:只要不希望被声明提前时
揭示: 函数其实是引用类型的对象
函数名其实仅是引用函数对象的变量
3.用new关键词:
var 函数名=
new Function("参数1","参数2",...,
"函数体; return 返回值");
1.*****Function
重载(overload)
匿名函数
作用域和作用域链
*****闭包
1.重载:
什么是: 相同函数名,不同参数列表的多个函数,在调用时,可自动根据传入的参数不同,调用不同的函数执行。
为什么: 相同的任务,就应该起相同的函数名,来减轻调用者的负担。
何时使用: 同一件事,根据传入参数的不同,执行不同的逻辑时。
如何实现:
js的语法不支持重载!
因为js中不允许同时包含多个同名函数
最后定义的同名函数,会覆盖之前定义的
解决: arguments
arguments:每个函数中,自动创建的,保存所有传入函数的参数值 的 类数组对象
类数组对象: 长的像数组的对象
vs 数组:
相同: 1. 可用下标访问每个元素
2. 都有length属性
3. 使用for 遍历
不同: 类型不同:
数组: Array
类数组对象: Object
无法使用数组类型的API
鄙视题:
arguments.callee: 引用了当前函数对象
专门实现递归调用
arguments.callee.caller: 表示调用当前函数的外层函数。
2. 匿名函数:
什么是: 定义函数时,不使用任何变量引用的函数。
为什么: 节约内存
因为没有任何变量引用,使用完立刻释放
何时使用: 如果一个函数只用一次。
如何使用:
1. 自调: 创建完函数,立刻执行。
(function(...){...})()
执行后,你们函数被释放。
作用: 1.节约内存
2.充当临时作用域。避免在全局创建不必要的变量。
2. 回调: 将函数传给另一个函数去使用
比如: 比较器函数:
arr.sort(function(a,b){return a-b});
3. ****作用域和作用域链
函数的生命周期:
1. 程序开始执行:
创建一个Execution Context Stack(ECS)
依次保存正在调用的函数的执行环境的栈结构
创建全局作用域对象:window
在ECS中压入第一个全局执行环境EC,全局EC引用window
2. 定义函数时:
创建函数对象,封装函数的定义
在函数对象中,设置scope属性,引用函数来自的作用域,通常scope都是window
用函数名创建全局变量,引用函数对象
3. 调用函数时:
创建一个活动对象Actived Object(AO): 活动对象:保存函数的局部变量的函数作用域对象。
向ECS中压入本次函数调用的执行环境EC
EC引用AO
设置AO引用函数的scope(window)
4. 函数调用后:
EC出栈,导致AO无人使用,被释放
导致,AO中的局部变量一同被释放!
作用域: 一个变量的可用范围
其实window对象就是全局作用域
AO对象就是函数作用域
AO对象又引用了window对象
作用域链: 由各级作用域对象,逐级引用形成的链式结构,就是作用域链。
作用域链的末尾是window对象
作用域链控制着变量的使用顺序:
优先使用AO中的局部变量
如果AO中没有,就延作用域链向下找。
如果到window还没找到,就报错
4. *****闭包:
什么是闭包:即重用变量,又保护变量不受污染的机制。
为什么使用:
全局变量: 优: 随处可用,可反复使用
缺: 易被全局污染
局部变量: 优: 仅在函数内可用,不会被污染
缺: 无法反复使用
何时使用: 如果希望重用一个变量,且不希望该变量被随意篡改时。
如何实现:3步:
1. 用外层函数将受保护的变量和操作变量的函数封装在内部
2. 外层函数将内层函数返回
3. 调用外层函数,获得返回的内层函数对象。
说明: 1. 两次外层函数调用返回的闭包中,受保护的变量是各自独立的,没有任何关系。
- JavaScript学习笔记七
- javascript笔记(七)
- ## javascript笔记(七)
- JavaScript 学习笔记七 闭包二
- JavaScript笔记七:客户端检测
- JavaScript学习笔记七:iterable
- 《悟透javascript》学习笔记:七、对象描述
- JavaScript 学习笔记七 闭包
- [持续更新]JavaScript学习笔记(七)
- javascript高级开发学习笔记七
- javascript权威指南学习笔记-对象(七)
- javaScript笔记 (七) 正则表达式
- Eloquent JavaScript 笔记 七: Electronic Life
- JavaScript学习笔记整理(七)
- javaScript(七)
- javascript学习笔记(七)--DOM基础
- javascript学习笔记(七)--DOM基础
- JavaScript学习笔记(七) JSON和正则表达式字面量
- 安卓自动缩放布局,解决屏幕适配问题
- centos7 虚拟机错误Failed to start LSB: Bring
- python 变量作用域实例
- FOJ 1176 The Happy Worm
- 开博客啦,虽然不知道要写啥
- javascript笔记(七)
- Linux共享对象之编译参数fPIC
- hdu 5944 Fxx and string
- Java基础知识
- 交换两个变量的值,不使用第三个变量的四种方法
- SVG
- Java MessageDigest类的功能及用法
- 第三章 运算符和语句
- Blob分析的基本概念和实现流程