一.函数的介绍
概念:函数就是把特定功能的代码抽取出来,使之成为程序中的一个独立实体。
特点:
1). 复用性:函数可以在同一个程序或其他程序中多次重复使用(通过函数名调用)
2). 使程序变得更简短而清晰,提高可读性
3). 有利于程序维护分类
1).内置函数(其他场景也有:如浏览器,Node.js)
2).系统函数(该场景才有)
3). 自定义函数(重点)定义函数
function 函数名(形参){
你的代码
return "";
}
形参:形参是一个局部变量,只能在函数块里面使用
//调用函数
函数名(实参)
- arguments
arguments 是函数内部的一个数组对象,用于接受函数传入的参数.
arguments是一个伪数组,它有一个长度 length属性;
简单说:就是传入的实参个数列表;
二.作用域:
就是起作用的范围。或者说有效范围; 这里涉及到另外两个概念
1.局部变量:
定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只是函数内部,另外,形参也是局部变量.
2.全局变量:
全局变量就是定义在函数外部的变量,这个变量在任何函数中都有效,即作用域范围是当前文件的任何地方.
注意: 在定义变量时, 如果不写关键字var也是合法的, 且是全局变量, 但是这样写不安全,容易在其他地方被更改, 所以我们在函数中写变量要加上var
变量提升
局部优先,如果局部有,就使用局部的变量;
又如果局部没有,就去全局查找; 变量提升看一下代码:
var uname = "周杰伦";// 全局变量
function f_show() {
console.log(uname);
var uname = "蔡依林";//局部变量
}
f_show(); // 是周杰伦还是蔡依林 // 为什么是 undefined?
原因如下:
var uname = "周杰伦";// 全局变量
function f_show() {
var uname;//变量被提升到最上面,uname的值就是 undefined
console.log(uname); // undefined
uname = "蔡依林"; //后赋值
}
f_show(); // undefined
全局变量与局部变量
function show(){
var numA = numB = 20;
//如果在函数,内部不使用var 关键字 就是全局变量,所以numB是全局的
}
show();
三.函数的嵌套
函数的嵌套: 函数内部可以再包含其他函数;函数之间允许相互调用,也允许向外调用, 但是不可以调用同级函数的嵌套函数;
四.事件驱动
// click,mosueenter,mouseleave 去执行代码
// 事件驱动编程
// 事情执行函数
//1.获取指定按钮
var oBtn = document.getElementById("btn") //通过id获取文档里的元素
//2.给按钮绑定点击事件 (绑定,不代码执行)
// onclick 点击
//事件也可以帮忙执行函数
oBtn.onclick = function () {
//3.执行事件,逻辑代码
console.log("台上的男人真帅!");
}
//1.鼠标点击页面的按钮,也执行函数
//2.还可以直接执行函数,把 onclick当做函数名对待
oBtn.onclick();
五.递归
- 什么是递归?
函数自己调用自己,必须有零界点(结束条件) - 递归能做什么?
循环能做的事,递归都能实现
递和归 都做了什么事?
// 1 到100的和使用递归实现?
function fn(n) {
if (n == 1) {
return 1;//终止函数,并返回结果
}
return n + fn(n - 1);
}
console.log(fn(100));