JavaScript 基础(3){函数、作用域、递归、匿名函数、对象、数组}

一、函数

Number() / parseInt() / parseFloat() / alert() / prompt()...

函数分为系统函数和自定义函数

函数:是一个功能体,提供若干个数据,返回处理结果,用于封装重复执行的代码

  1. 创建普通函数

function 函数名称(){

  函数体---封装的要重复执行的代码

}

函数只是创建不会执行函数体中的代码

调用

  函数名()   //执行函数体中封装的代码

  1. 创建带有参数的函数

function 函数名称(参数列表){  //用于接收外部传递的数据

  函数体

}

调用

函数名称(参数列表)  //实际传递的数据

创建函数是的参数称为形参,调用函数时的参数称为实参,实参会赋值给形参,实参和形参的数量可以不匹配,如果形参未被赋值则为undefined

  1. 创建带有返回值的函数

function 函数名称(参数列表){  //用于接收外部传递的数据

  函数体

return 值; // 返回值,函数调用后得到的结果

}

调用

  函数名称(参数列表)

return 用于返回函数调用结果,如果函数中没有写return或者return后不加任何值返回undefined,一旦return执行就会结束函数的执行

对比returnbreak

return用于函数中,结束函数的执行

break用于循环和switch-case,结束循环或者switch-case的执行

二、作用域

  • 变量的作用域

  • 全局变量:在全局作用域下声明的变量就是全局变量,可以在任意的作用域下访问
  • 局部变量:在函数作用域下声明的变量就是局部变量,只能在当前的函数作用域下访问到
  • 全局作用域:函数以外的作用域
  • 函数作用域:函数以内的作用域
  • 函数内不加var声明的变量是全局变量
  • 变量提升:在执行程序前,会将var声明提升到所在作用域的最前面,值提升声明,赋值不提升
  • 函数的作用域

  • 全局函数:在全局作用域下创建的函数,可以在任意作用域下访问到
  • 局部函数:在函数作用域下创建的函数,只能在当前函数作用域下访问到
  • 作用域链:多个作用域嵌套的作用域结构,在寻找变量的时候,先到当下的作用域下寻找,如果当前没有会不断往上一级作用域寻找
  • 函数提升:程序执行前,会将函数提升到所在作用域的最前面,是整体提升

三、递归

  • 在函数的内部调用自身,本身是一个死循环,造成内存泄漏
  • 内存泄漏:内存中的空间被占满,无法保存新的数据.
  • 如何使用递归:
  •   要求边界条件
  • 结合着return

四、匿名函数

function () {}

函数声明

function fn(){

}

函数表达式

var fun=function(){

}

变量名称就是函数名称

对比函数名称()函数名称

函数名称()  :调用函数,执行函数体中的代码,得到返回结果

函数名称   :是一个变量,变量中保存了一个函数

对比函数声明函数表达式的区别

函数名称创建的函数存在函数整体提升,可以先写调用再写创建

函数表达式创建的函数只是存在变量声明的提升,必须先写创建再写调用

匿名函数自调用

为了防止全局污染

(fuction(){

  函数体               //函数作用域,变量是局部变量

})();

回调函数

  将函数作为参数传递

function tao(madai){

  madai   //调用传递进来的函数

}

function dong(){}

tao(dong)  //函数dong作为参数传递,叫做回调函数

tao(function(){  }) //匿名函数作为参数传递也是回调函数

系统函数

isNaN() 检测一个值是否为NaN,会隐式转换为数值,是NaN返回true  不是->false

五、对象

  对象是引用类型数据

  对象是一组属性和方法的集合

  一部手机 属性:有品牌\颜色\内存大小\屏幕尺寸..

                    方法:有打电话\玩游戏\看视频\听音乐...

  一本书   属性:书名\页数\颜色...

万物皆对象

JS的对象

  自定义对象:自己创建对象

  内置对象  :JS提供的对象

  宿主对象  :根据不同的执行环境划分

(2)使用对象字面量创建对象

  {属性名:属性值,属性名:属性值}

  属性名的引号可加可不加,如果含有特殊字符必须添加

        属性的访问

   对象.属性名

   对象[‘属性名’]

   如果属性名不存在返回的结果是undefined

        使用内置构造函数创建对象

  new Object()  返回一个空对象 ,需要单独添加每一个属性

构造函数:使用new来调用,返回对象

        遍历属性

  通过循环的方式,依次访问对象中的每个属性

for(var k in 对象){

  k 代表每一个对象

  对象[k]  代表属性名对应的属性值

}

  1. 方法

   对应的是一个函数,需要调用

var person={

  play:function(){

     this

}

}

this  //指向调用方法的对象

person.play(); //调用方法

(4)检测属性是否存在

  对象.属性名===undefined  true->不存在   false->存在

  对象.hasOwnProperty(‘属性名’)  true->存在  false->不存在

  ‘属性名’ in 对象   true->存在  false->不存在

六、数据的存储

  •   原始类型:将数据执行保存到了栈内存
  •   引用类型:包括对象\函数\数组等..都是引用类型数据,将数据保存在了堆内存中,同时会生成一个地址,然后将地址保存到了栈内存的变量中
  •   引用类型数据的销毁:数据不被任何的地址所指向就会自动销毁;
  •   null:是一个空地址,不指向任何的引用类型数据,只需赋值为null即可销毁引用类型数据

七、数组

数组是一组数据的集合,每个数据称为元素

  1. 数组字面量

  [元素1,元素2]

  1. 访问数组元素

  数组[下标]

  下标:自动为元素添加的编号,是0开始的整数

  1. 数组的长度

  数组.length  获取数组元素的个数

  在数组的末尾添加新的元素   数组[数组.length]=值;

  1. 内置构造函数创建数组

  new Array(元素1,元素2);

  new Array(3)    创建一个数字,初始化长度,可以添加更多个元素

(5)数组的分类

  数组分为索引数组和关联数组

  索引数组:以>=0的整数作为下标

  关联数组:以字符串作为下标,需要手动添加元素,是为了强调某一个元素

  1. 遍历数组

  依次访问对象中的元素

for-in

for( var k in 数组){

  k代表下标

  数组[k]  下标对应的元素

}

循环(推荐方法)

for(var i=o;i<数组.leng;i++){

  i代表下标

  数组[i]  下标对应的元素

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值