1.递归
在函数的内部调用自身,本身是一个死循环,造成内存泄漏
内存泄漏:内存中的空间被占满,无法保存新的数据。
如何使用递归:
要求边界条件
结合着return
2.匿名函数
function () { }
(1)创建函数
函数声明 function fn(){ } |
函数表达式 var fun=function(){ } 变量名称就是函数名称 |
对比函数名称()和函数名称
函数名称() 调用函数,执行函数体中的代码,得到返回结果
函数名称 是一个变量,变量中保存了一个函数
对比函数声明和函数表达式的区别
函数名称创建的函数存在函数整体提升,可以先写调用再写创建
函数表达式创建的函数只是存在变量声明的提升,必须先写创建再写调用
(2)匿名函数自调用
为了防止全局污染
(function(){ //函数作用域,变量是局部变量 })(); |
(3)回调函数
将函数作为参数传递
function tao(madai){ madai() //调用传递进来的函数 } function dong(){} tao(dong) //函数dong作为参数传递就是回调函数 tao( function(){ } ) //匿名函数作为参数传递也是回调函数 |
3.系统函数
isNaN() 检测一个值是否为NaN,会隐式转换为数值,是NaN -> true 不是->false
eval() 执行字符串表达式
工具网站
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
https://www.w3school.com.cn/js/index.asp
4.对象
是引用类型数据
对象是一组属性和方法的集合
一部手机:属性有品牌、颜色、内存大小、屏幕尺寸... 方法有打电话、玩游戏、看视频、听音乐....
一本书:属性有书名、作者、页数、颜色.... 方法打人、取暖....
涛哥:属性姓名、性别、头发颜色、体重... 方法摊煎饼、跑接力、养兔子、织麻袋..
万物皆对象
(1)JS的对象
自定义对象:自己创建的对象
内置对象:JS提供的对象
宿主对象:根据不同的执行环境划分
(2)使用对象字面量创建对象
{ 属性名: 属性值, 属性名: 属性值 }
属性名的引号可加可不加,如果含有特殊字符必须添加
练习:创建一个手机对象,包含的属性有品牌、颜色、屏幕尺寸、产地
(3)属性的访问
对象.属性名
对象['属性名']
如果属性名不存在返回的结果是undefined