函数的概念和作用
概念:
函数就是把完成特定功能的一段代码[抽象出来],使之成为程序中的一个[独立实体],起个名字(函数名)。可以在同一个程序或其他程序中多次重复使用(通过函数名调用)

作用:
使程序变得简短而清晰
有利于程序维护
可以提高程序开发效率
提高了代码的重用性(复用性)

函数的分类
1.内置函数(系统函数、官方函数)
是官方提供好的函数,直接使用,例如:
alert()
document.write()
console.log()
parseInt() parseFloat()…

2.自定义函数(用户自定义的函数)
用户根据实际需求,需要自己封装一个函数。

3.编程中函数的概念
函数是当它被调用时执行的可重复使用的代码块。

4事件驱动函数
什么是事件驱动函数?
在和页面交互的过程中所调用的函数,该函数被称之为事件驱动函数。

什么是事件?
和页面交互的行为称之为事件。比如:鼠标点击某个按钮时(onclick)、鼠标浮动或离开
到某个区域时(onmouseenter、onmouseleave)、文本框获取焦点和失去焦点时(onfocus、onblur)等

事件驱动函数的使用

节点对象.on+事件名 = 事件处理程序

事件目标:节点对象,比如给某个按钮添加点击事件,该按钮就是节点对象或事件目标
事件类型:如onclick、onmouseover、onmouseout
事件处理程序: 函数

如:
var btn = document.getElementById(“btn”);
btn.onclick = function(){
//执行代码
}

案例:鼠标进入和离开切换图片。

4、函数的定义

function关键字定义一个函数
function 函数名(参数1名字, 参数2名字, …) 函数可以没有形参
{
语句/代码块;
return 返回值; 函数可以没有返回值(undefined)
}

函数的参数跟变量是一样使用。

形参就是在函数定义时,函数名后面的参数,不能用var修饰。
实参就是调用时,函数名后面的参数

注:在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。

arguments
java sript 函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型,在调用这个函数时也未必一定要传递两个参数,原因是 ECMAScript 中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)
arguments
arguments.length 参数的个数
arguments[i] 访问第i个参数
有时函数不知道要添加多少个未知数,所以形参个数不确定的情况下,
可以使用arguments的用法来进行查询,比较.

作用域:就是起作用的范围。或者说有效范围。

  • 局部变量
    局部变量就是定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只是函数内部,另外,形参也是局部变量。
  • 全局变量
    全局变量就是定义在函数外部的变量,这个变量在任何函数中都有效,即作用域范围是当前文件的任何地方。

注意:定义变量时省略var是不安全的,不过是合法的,不写var的时候会被解释是全局变量

函数的递归调用(方法)

方法:
1.首先去找临界值,即无需计算,获得的值。
2. 找这一次和上一次的关系
3. 假设当前函数已经可以使用,调用自身计算上一次

.函数的递归调用(强调)
【注】函数的递归调用只能用于静态的数据运算,如果是动态数据,风险过高,容易崩溃。
【功用】凡是循环能做到的,递归都能做到。
数组:
为什么使用数组
当我们需要表示一组数据,或者叫做一次性定义很多相似的数字或变量时,就需要使用数组,如:表示一个班级学生的成绩, 一年十二个月的销售数据等等。

2、数组的概念
概念:数组的字面意思就是一组数据,一组(一般情况下相同类型)的数据(不一定都是数字,可以是任意数据类型)。
数组是一种数据类型。
数组的作用是:使用单独的变量名来存储一系列的值。

三种声明方式:
1、通过new运算符创建数组
var arr = new Array(10, 20, true, “hello”);
2、省略new运算符创建数组
var arr = Array( 10, 20, true, “hello”);
3、直接通过常量赋值
var arr = [10, 20, true, "hello”];

注意:
var arr = new Array(10);
var arr = Array(10);

【注】上述两种写法,都是声明长

数组的方法:
1.栈方法
ECMAScript 数组提供了一种让数组的行为类似于其他数据结构的方法。也就是说,可 以让数组像栈一样,可以限制插入和删除项的数据结构。栈是一种数据结构(后进先出),也 就是说最新添加的元素最早被移除。而栈中元素的插入(或叫推入)和移除(或叫弹出),只发 生在一个位置——栈的顶部。ECMAScript 为数组专门提供了 push()和 pop()方法。

push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。
而pop()方法则从数组末尾移除最后一个元素,减少数组的length值,然后返回移除的元素。

2 队列方法
队列在数组的末端添加元素,从数组的前端移除元素。通过push()向数组末端添加一个元素,然后通过shift()方法从数组前端移除一个元素。
shift()方法可以移除数组首位元素,并且返回长度
总结:二种数组方法只要是插入数据返回的值都是当前数组的长度,并且插入的位置都是数组的末尾插入,当提取时需要逆序才能得出正确的数。
对于移除数据,都是返回当前数组的所有元素

数组的一个函数
concat() 方法可以基于当前数组创建一个新数组。
slice() 方法可以基于当前数组获取指定区域元素 [start, end)
splice() 方法由于其参数的特殊性,可以完成 增、删、改三个功能
splice中的删除功能: var box2 = box.splice(0, 2);
splice中的插入功能: var box2 = box.splice(1, 0, “钢铁侠”);
splice中的替换功能: var box2 = box.splice(1, 1, 100);
4. join() 方法用数组元素组成字符串。
5. reverse() 逆向排序
6. sort() 从小到大排序,字符串排序