目录
1. 初识函数
1.1. 函数是什么?
- 先来看一段代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var sum = 0;
for (var i = 1; i <= 50; i++) {
sum += i;
}
document.write("50以内所有整数之和为:" + sum);
</script>
</head>
<body></body>
</html>
- 大家一看就知道上面这段代码实现的功能是:计算 50 以内所有整数之和。
- 如果要分别计算:
-
- 50 以内所有整数之和
-
- 100 以内所有整数之和
- 那应该怎么实现呢?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var sum1 = 0;
for (var i = 1; i <= 50; i++) {
sum1 += i;
}
document.write("50以内所有整数之和为:" + sum1);
document.write("<br/>");
var sum2 = 0;
for (var i = 1; i <= 100; i++) {
sum2 += i;
}
document.write("100以内所有整数之和为:" + sum2);
</script>
</head>
<body></body>
</html>
- 为了减轻这种重复编码的负担,编程语言引入了函数的概念。
- 如果我们想要实现上面 5 个范围内所有整数之和,用函数可以这样实现:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
//定义函数
function sum(n) {
var m = 0;
for (var i = 1; i <= n; i++) {
m += i;
}
document.write(n + "以内所有整数之和为:" + m + "<br/>");
}
//调用函数,计算50以内所有整数之和
sum(50);
//调用函数,计算100以内所有整数之和
sum(100);
//调用函数,计算150以内所有整数之和
sum(150);
//调用函数,计算200以内所有整数之和
sum(200);
//调用函数,计算250以内所有整数之和
sum(250);
</script>
</head>
<body></body>
</html>
1.2. 函数的定义
- 在
JavaScript
中,函数可以分两种: -
- 没有
返回值
的函数;
- 没有
-
- 有
返回值
的函数。
- 有
- 无论是哪一种函数,都必须使用
function
来定义的。
1.2.1. 没有返回值的函数
- 没有返回值的函数,指的是函数执行完就结束了,不会返回任何值。
- 语法:
function 函数名(参数1 , 参数2 ,..., 参数n){
……
}
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
//定义函数
function addSum(a, b) {
var sum = a + b;
document.write(sum);
}
//调用函数
addSum(1, 2);
</script>
</head>
<body></body>
</html>
1.2.2. 有返回值的函数
- 有返回值的函数,指的是函数执行完了之后,会返回一个值,这个返回值可以供我们使用。
- 语法:
function 函数名(参数1 , 参数2 ,..., 参数n){
……
return 返回值;
}
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
//定义函数
function addSum(a, b) {
var sum = a + b;
return sum;
}
//调用函数
var n = addSum(1, 2) + 100;
document.write(n);
</script>
</head>
<body></body>
</html>
1.2.3. 全局变量与局部变量
- 在
JavaScript
中,变量有一定的作用域(也就是变量的有效范围)。
- 根据作用域,变量可以分为以下 2 种:
-
- 全局变量
-
- 局部变量
- 全局变量一般在主程序中定义,其有效范围是从定义开始,一直到整个程序结束为止。
- 局部变量一般在函数中定义,其有效范围只限于在函数之中,函数执行完了就没了。
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a = "十里";
//定义函数
function getMes() {
var b = a + "桃花";
document.write(b);
}
//调用函数
getMes();
</script>
</head>
<body></body>
</html>
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a = "十里";
//定义函数
function getMes() {
var b = a + "桃花";
}
//调用函数
getMes();
//尝试使用函数内的变量b
var str = "三生三世" + b;
document.write(str);
</script>
</head>
<body></body>
</html>
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
var a = "十里";
//定义函数
function getMes() {
var b = a + "桃花";
return b;
}
var str = "三生三世" + getMes();
document.write(str);
</script>
</head>
<body></body>
</html>
1.3. 函数的调用
- 如果一个函数仅仅是定义而没有被调用的话,则函数本身是不会执行的(认真琢磨这句话,非常重要)。
- 我们都知道
JavaScript
代码是从上到下执行的,JavaScript
遇到函数定义部分会直接跳过(忽略掉),然后只有遇到函数调用才会返回去执行函数定义部分。
1.3.1. 直接调用
- 直接调用,是常见的函数调用方式,一般用于没有返回值的函数。
- 语法:
函数名(实参1, 实参2, ... , 实参n);
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
//定义函数
function getMes() {
document.write("听说泰国人很大方,一见面就说:刷我滴卡。");
}
//调用函数
getMes();
</script>
</head>
<body></body>
</html>
1.3.2. 在表达式中调用
- 在表达式中调用,一般用于有返回值的函数,然后函数的返回值会参与表达式的计算。
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
//定义函数
function addSum(a, b) {
var sum = a + b;
return sum;
}
//调用函数
var n = addSum(1, 2) + 100;
document.write(n);
</script>
</head>
<body></body>
</html>
1.3.3. 在超链接中调用
- 在超链接中调用,指的是在
a
元素的href
属性中使用javascript:函数名
的形式来调用函数。
- 语法:
<a href="javascript:函数名"></a>
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
function expressMes() {
alert("我:I Love\n她:爬");
}
</script>
</head>
<body>
<a href="javascript:expressMes()">表白对话</a>
</body>
</html>
1.3.4. 在事件中调用
JavaScript
是基于事件的一门语言,像鼠标移动是一个事件、鼠标单击也是一个事件,类似的事件很多。
- 当一个事件产生的时候,我们就可以调用某个函数来针对这个事件作出响应。
- 举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
function alertMes() {
alert("Gok,给你初恋般的感觉~");
}
</script>
</head>
<body>
<input type="button" onclick="alertMes()" value="提交" />
</body>
</html>
1.4.内置函数
内置函数: JavaScript 已经封装好的函数, 直接用就可以了。
1.4.1.String内置函数
- concat: 连接字符串
- charAt: 根据下标获取字符
- indexOf: 求对应字符串的下标
- length:字符长度
- touppercase:转换大小写
- subString(start, end): 包前不包后
- subStr(start, length)
- replace: 替换字符串
// String 相关
var str = "I like eat chicken!!!";
// 获取某个下标的字符
console.log(str.charAt(0));
console.log(str.charAt(4));
// 得到一个输入的值
str = "你好吗";
if (str.indexOf("吗") != -1){
console.log("输入的值存在铭感字符!");
}
// 字符串长度
var a = str.length;
// 转换大小写
str = "user";
console.log(str.toUpperCase());
// 封装一个函数: ucfirst 将首字母转换成大写?
/**
* 将字符串的首字母转换成大写
* @param str
*/
function ucfirst(str) {
// 获取首字母并转换成大写
var first = str.charAt(0).toUpperCase();
// user
// u ser
return first+str.substr(1);
}
str = ucfirst("user");
console.log(str);
1.4.2.Math内置函数
- Math.ceil() : 向上取整
- Math.floor(): 向下取整
- Math.round(): 四舍五入
- Math.random(): 伪随机数
// 向上取整
console.log(Math.ceil(7.1));
// 向下取整
console.log(Math.floor(7.9));
// 伪随机数
console.log(Math.ceil(Math.random()*10));
var ran = Math.random() * 10000;
var num = Math.floor(ran + 1);
console.log(num);
1.4.3.数组(重点)
看到中括号,马上想到数组
// 定义空数组
var arr1 = new Array("后裔","小卤蛋","虞姬");
console.log(arr1);
// 定义初始化长度的数组
var arr2 = new Array(5);
console.log(arr2);
// 动态初始化数组
var arr3 = new Array("程咬金","亚瑟","孙尚香");
console.log(arr3);
// 用中括号定义
var arr4 = ["后裔","小卤蛋","虞姬"];
console.log(arr4);
// 查看数组的长度
console.log(arr4.length);
数组的下标!!!!!!!!!!!!!!!!!!!!!!!!!!
从0开始
// 获取元素值
arr=['小鲁班','凯']
console.log(arr[0]);
// 修改元素值
arr[] = "李元芳";
console.log(arr);
数组的遍历依次的去查看一遍数组中的每个元素
// 定义空数组
var arr = ["后裔","小卤蛋","虞姬","黄忠", "伽罗"];
// fori的遍历
// 如果数组的元素很多
var len = arr.length;
for (var i = 0; i < len; i++) {
console.log(arr[i]);
}
console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
// for in => 迭代遍历是下标
for (var i in arr){
console.log(arr[i]);
}
console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
// for of => 迭代遍历是元素
for (var value of arr){
console.log(value);
}
数组相关函数
// 定义数组
var arr = ["后裔","小卤蛋","虞姬","黄忠", "伽罗"];
console.log(arr);
// 添加元素在末尾
arr.push("程咬金");
console.log(arr);
// 在数组的头部添加元素
arr.unshift("马可波罗");
console.log(arr);
// 删除最后一个元素
arr.pop();
console.log(arr);
// 删除多个
arr.splice(2, 2);
console.log(arr);
// 插入
arr.splice(1, 0, "小卤蛋","公孙离");
console.log(arr);
// 替换
arr.splice(1, 1, "大卤蛋");
console.log(arr);
console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
// 定义一个数字的数组
var nums = [12,1,55,66,22,3];
console.log(nums);
// 默认的排序是字典序排序,比较字符
nums.sort();
console.log(nums);
// 实际的业务中, 需要升序/降序进行排序
nums.sort(function (a, b) {
return b-a;
});
console.log(nums);