JS(函数,数组)

函数

作用域

递归

匿名函数

1.函数

Number()/parseInt()/parseFloat()/alert()/prompt()...
函数分为系统函数和自定义函数
函数:是一个功能体,提供若干个数据,返回处理结果,用	于封装要重复执行的代码

(1)创建普通函数

function 函数名称(){
函数体 —— 封装的要重复执行的代码
}
函数只是创建不会执行函数体中的代码
调用   
函数名称()    //执行函数体中封装的代码
练习:创建函数getSum,在函数体中封装计算1~100之间所	有整数的和并打印结果,最后调用多次

(2)创建带有参数的函数

function 函数名称(参数列表){  //用于接收外部传递的数据
函数体
}
调用
函数名称(参数列表)  //实际传递的数据
创建函数时的参数称为形参,调用函数时的参数称为实参,	实参会赋值给形参,实参和形参的数量可以不匹配,如果形参	未被赋值则为undefined。
练习:创建函数getSum,传递参数,计算1~任意数字之间	所有整数的和,调用多次
练习:创建函数getRun,传递两个参数,统计任意两个年份	之间所有的闰年个数,调用多次。

(3)创建带有返回值的函数

function  函数名称(参数列表){
函数体
return 值;  //返回值,函数调用后得到的结果
}
调用
	函数名称(参数列表)
return用于返回函数调用的结果,如果函数中没有写return或	者return后不加任何值则返回undefined,一旦return执行就会	结束函数的执行。
练习:创建函数getMax1,传递任意两个数字,返回最大值
练习:创建函数getMax2,传递任意3个数字,返回最大值
练习:创建函数getStatus,传递订单的状态码,返回对应的	汉字的状态
1-等待付款  2-等待发货  3-运输中  4-已签收  5-已取消   其它-无法追踪
使用switch-case进行多项判断
对比return和break
return用于函数中,结束函数的执行
break用于循环和switch-case,结束循环或者switch-case的执行
练习:创建函数isPrime,传递任意一个数字,查看是否为素数,返回布尔型的值
练习:创建函数isRun,传递任意一个年份,查看是否为闰年,返回布尔型的值

2.变量的作用域

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

3.函数的作用域

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

斐波那契数列
第1项、第2项都是1,从第3项开始,每项的值是前两项相加的和;
1   1   2   3   5   8   13   21...

4.构造函数protopyte特点

构造函数
function  构造函数名字(开头大写){
	this.方法体   //this 如指针.谁调用它指向谁
}
protopyte 1.可以优化构造函数,可以被创造出来的构造函数共享
		  2.除了放入方法外 可以存储对象
主要作用优化共同的方法属性 ,只占用一份存储空间
自定义后需要手动添加
constructor:构造函数名字  方法 让指针从新指向构造函数

5所有构造函数都是 Function的实例化

如:console.log(Arr.__proto__===Function.prototype)
		//结果为true

在这里插入图片描述
在这里插入图片描述

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()   执行字符串表达式

4.对象

是引用类型数据
对象是一组属性和方法的集合
一部手机:属性有品牌、颜色、内存大小、屏幕尺寸... 方法	有打电话、玩游戏、看视频、听音乐....
 一本书:属性有书名、作者、页数、颜色....  方法打人、取	暖....
涛哥:属性姓名、性别、头发颜色、体重...  方法摊煎饼、跑接力、养兔子、织麻袋..
万物皆对象

(1)JS的对象

自定义对象:自己创建的对象
内置对象:JS提供的对象
宿主对象:根据不同的执行环境划分
(2)使用对象字面量创建对象
{ 属性名: 属性值, 属性名: 属性值 }
属性名的引号可加可不加,如果含有特殊字符必须添加
练习:创建一个手机对象,包含的属性有品牌、颜色、屏幕	尺寸、产地

(3)属性的访问

对象.属性名
对象['属性名']
如果属性名不存在返回的结果是undefined
练习:创建一个图书对象,包含的属性有编号,书名,作者,出版时间;修改图书的作者,添加图书的价格,出版社;最后打印对象

1.对象

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

new Object()   返回一个空对象,需要单独添加每一个属性
构造函数:使用new来调用,返回对象
练习:使用内置构造函数创建一个员工的对象,包含有员工的编号,姓名,性别,工资。

(2)遍历属性

通过循环的方式,依次访问对象中的每个属性
for(var k  in  对象){
k 代表每一个属性名
对象[k]   代表属性名对应的属性值
}
练习:创建对象,包含一组成绩,遍历对象属性得到每个成	绩,计总成算出绩,同时计算平均成绩

(3)方法

对应的是一个函数,需要调用
var person={
play: function(){
 	this  //指向调用方法的对象
}
}
person.play(); //调用方法
 练习:创建一个圆对象,属性有半径,圆周率,添加计算周	长和计算面积的两个方法,将计算的结果返回。

(4)检测属性是否存在

 对象.属性名===undefined     true -> 不存在    false -> 存在
对象.hasOwnProperty('属性名')    true ->存在   false->不存	在
 '属性名'  in  对象     true ->存在   false->不存在
练习:创建一个商品对象,包含有商品的标题,价格,如果	产地属性不存在则添加该属性,如果价格属性存在,在原来的	基础之上加1000

2.数据的存储

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

3.数组

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

(1)数组字面量

[ 元素1, 元素2... ]
练习:创建数组,包含有一组商品的名称
练习:创建数组,保存有一组工资

(2)访问数组元素

数组[下标]
下标:自动为每个元素添加的编号,是0开始的整数
练习:创建数组,添加若干个城市的名称,修改其中的元	素,在数组的末尾添加新的元素

(3)数组的长度

数组.length   获取数组元素的个数
在数组的末尾添加新的元素    数组[ 数组.length ]=值
练习:创建空数组,使用数组的长度往数组中添加多个汽车	的品牌名称

(4)内置构造函数创建数组

new Array(元素1, 元素2...)
new Array(3)    创建一个数组,初始化长度,可以添加更多个元素
练习:创建数组,包含有多个国家。
练习:创建数组,初始化长度为5,添加篮球场上的5个位置
	中锋、大前锋、小前锋、得分后卫、控球后卫

(5)数组的分类

数组分为索引数组和关联数组
索引数组:以>=0的整数作为下标
关联数组:以字符串作为下标,需要手动添加元素,是为了	强调某一个元素。

(6)遍历数组

依次访问对象中的每个元素
for-in
for(var k  in  数组){
k 代表下标
数组[k]  下标对应的元素
}
循环(推荐方法)
for(var i=0;i<数组.length;i++){
i 代表下标
数组[i]  下标对应的元素
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值