递归(了解)
- 在函数内部调用自身,默认是一个死循环。
- 如何正确的使用递归:结合着return,要有结束的条件。
练习:使用递归计算1~n之间所有整数的和
匿名函数
- 创建函数
var fun=function() { }
不管哪种方式创建的函数,函数名称本质上就是一个变量,保存了一个函数
练习:使用函数表达式创建函数getSum,计算任意两个数字之间所有整数的和
函数声明和函数表达式的区别:①函数声明存在函数提升,可以先调用在创建②函数表达式不存在函数提升,只是变量提升,必须先创建函数在调用 - 匿名函数自调用
目的:创建函数作用域,防止污染全局(function(){ //函数作用域,里面的变量是局部变量 })();//后面的()是调用
回调函数
- 传递的参数是另一个函数
- 目的:就是为了确保一个函数执行完以后,再去执行另一个函数
function hua( a ){ console.log('hua开始跑'); console.log('hua跑到了第一棒终点'); //让ran开始跑 //把ran放下,ran开始跑,抱着dong跑 a(dong); } function ran(b){ console.log('ran开始跑'); console.log('ran到第二棒终点了'); //ran到终点,放下dong,dong开始跑 b() } //当ran函数调用结束后,再次调用dong function dong(){ console.log('dong开始跑'); console.log('dong到第三棒终点了'); } //传递的是一个函数名称 //在调用hua的时候,hua里边带着ran hua( ran );
全局函数
Number()/parseInt()/parseFloat()
encodeURI()
编码为一个URI,会将非英文字符编码decodeURI()
将一遍吗的URI进行解码isNaN()
检测一个值转数值后是否为NaN,内部自动调用Number,是NaN返回true,否则false
练习:声明变量保存任意数据,检测该数据是否为数值,如果不是数值,打印’请提供一个数字’
isFinity()
检测一个值是否为有限值,是->true,否->false;只有无穷不是有限值,其他都是有限值,无限小数也是有限值eval()
函数可计算某个字符串,并执行其中的的 JavaScript 代码。提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。
对象
- 属于引用类型数据
- 对象是一组属性和方法的集合
- 属性侧重外观,名词;
- 方法侧重功能,动词;
- 对象是具体到某一个事务(万物皆对象)
- JS中的对象
- 自定义对象,用户创建的对象
- 内置对象,JS提供的对象
- 宿主对象,根据不同的环境划分对象
- 自定义对象
- 内置构造函数
- 自定义构造函数(JS高级学到)
- 对象字面量
- 使用对象字面量创建对象
- 使用大括号{}创建空对象
- 属性名和属性值之间用冒号分开
- 多个属性之间用逗号分开
- 如果属性名中含有特殊字符,必须添加引号,其他情况下,引号可加可不加
练习:创建一个手机对象,包含有颜色,尺寸,品牌,产地
- 访问对象中的属性
- 对象.属性名
- 对象[‘属性名’] 若属性名中含有特殊字符,必须使用这一种方法
- 如果访问不存在的属性,返回undefined
练习:创建图书对象,包含图书的编号,标题,价格,作者;打印图书的作者,修改图书的价格,添加图书出版社;最终打印该对象
- 删除属性
delete 对象.属性名
delete 对象['属性名']
- 使用内置构造函数创建对象
new Object();
创建一个空的对象,需要单独往对象中添加属性或方法
练习:创建城市对象,包含名称,肺炎人数,治愈人数,死亡人数