前言: 完成以下练习
编写代码:计算 1-100 相加并输出结果, 计算 20-80 相加,并输出结果, 计算 100-200 相加,并输出结果
var sum1 = 0;
for (var i = 1; i <= 100; i++) {
sum1 += i;
}
console.log(sum1)
var sum2 = 0;
for (var i = 20; i <= 80; i++) {
sum2 += i;
}
console.log(sum2)
var sum3 = 0;
for (var i = 100; i <= 200; i++) {
sum3 += i;
}
console.log(sum3)
没学函数前, 我们可能会写三遍 for 循环, 有了函数之后只需要写一遍即可.
function sum(min, max) {
var sum = 0;
for (var i = min; i <= max; i++) {
sum += i;
}
return sum;
}
console.log(sum(1, 100));
console.log(sum(20, 80));
console.log(sum(100, 200));
(一)函数的声明函数的作用
1.1 封装多行语句,可以重复使用,类型为 function
1.2 声明函数和调用函数
<script>
// 声明函数
function sayHeloo() {
console.log('hello1');
console.log('hello2');
console.log('hello3');
console.log('hello4');
console.log('hello5');
console.log('hello6');
}
// 调用函数
sayHeloo();
// 声明函数 1到100累加
function sum() {
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum);
}
// 调用函数
sum();
</script>
1.3 对象中的函数(方法), alert 就是 window 对象的一个方法
<script>
var obj = {
name: 'laohu',
age: 100,
say: function() {
console.log('我是laohu');
}
}
// 在对象里调用函数, 对象里的函数我们称之为对象的方法
obj.say();
</script>
(二)函数的调用方式
2.1 手动调用
<script>
function say() {
console.log('hello');
}
// 手动调用
say();
</script>
2.2 绑定一个事件来调用(这里的函数叫: 监听器, 事件句柄
2.3 需求: 从页面上输入两个加数,绑定事件,加上两个加数相加的结果,并显示在页面上
<body>
<input value="" type="text" id="num1"> + <input type="text" id="num2"> = <input type="text" id="sum">
<p>
<button onclick="add()">相加</button>
</p>
<script>
function add() {
// 获取元素阶段
var $num1 = document.getElementById('num1');
var $num2 = document.getElementById('num2');
var $sum = document.getElementById('sum');
// 获取input标签的值
var num1 = $num1.value;
var num2 = $num2.value;
var sum = Number(num1) + Number(num2);
$sum.value = sum;
}
</script>
</body>
(1) 获取元素节点 document.getElementById('xxx')
(2) 获取input标签的值
(三)函数传递参数
3.1 调用时传入的数据,跟函数的参数一一对应, 调用的时候没有传所需要的参数, 该参数的值为undefined
<script>
// 实现任意两个数相加的功能
// 参数num1和参数num2叫形参
function add(num1, num2) {
var sum = num1 + num2;
console.log(sum);
}
// 参数5和8, 叫做实参
add(5, 8);
add(100, 200);
console.log('------任意两个数累加------')
//任意两个数累加
function add2(a, b) {
var sum = 0;
for (var i = a; i <= b; i++) {
sum += i;
}
console.log(sum);
}
// add2(1, 100);
// add2(20, 80);
// add2(100, 200);
add2(100); // a的值为100, b的值为undefined
</script>
3.2 函数和变量声明提前
<script>
// 函数声明提前
add(100, 200);
function add(a, b) {
var sum = a + b;
console.log(sum);
}
</script>
<script>
// 变量需要先声明后使用
// 变量声明提前, 然后再赋值
alert(num);
console.log(22222);
console.log(22222);
console.log(22222);
debugger;
var num = 100;
alert(num);
</script>
3.3 基本数据类型和引用数据类型参数的区别
<script>
// 基本数据类型参数传递
function add(a, b) {
var sum = a + b;
a = 11;
b = 22;
console.log(sum);
}
var num1 = 10;
var num2 = 20;
add(num1, num2);
console.log('a:' + num1, 'b:' + num2);
debugger;
function test(obj) {
console.log(111);
console.log(222);
obj.age = 200;
}
var person = {
name: 'lh',
age: 100
}
test(person);
console.log('age:', person.age); //
</script>
(四)函数返回值
4.1 使用 return 返回计算的结果
<script>
function add(a, b) {
var sum = a + b;
return sum;
}
var aa = add(10, 20);
alert(aa);
</script>
4.2 没写 return,默认返回 undefined
<script>
function say() {
console.log('hello');
}
say();
</script>
<script>
var age = prompt();
// 先转成数字
age = Number(age);
// age的值是NaN,结果为true, 否则为false
if (isNaN(age)) {
alert('请输入数字');
return false;/////////////////////////妙用
}
if (age < 0) {
alert('请输入大于或等于0的数字');
return false;
}
// 进行年龄分段的判断
if (age < 6) {
alert('这是个婴儿');
} else if (age < 12) {
alert('这是个少儿');
} else if (age < 17) {
alert('这是个青少年');
} else if (age < 45) {
alert('这是个青壮年');
} else if (age < 69) {
alert('这是个中年人');
} else {
alert('这是个老年人');
}
</script>
4.3 alert(), console.log(), Number(), String(); 调用结束后为什么有个”undefined”出现
4.4 return 之后的代码不执行
<script>
function test() {
console.log(1);
console.log(2);
return 222;
console.log(3);
}
test();
</script>
(五)作用域
5.1 什么是作用域
demo1.js文件
var a = 10;
var b = 20;
demo1.2.js文件
console.log('我是demo1.2');
console.log(a);
console.log(b);
<body>
<script src="./demo1.js"></script>
<script src="./demo1.2.js"></script>
</body>
5.2 window,全局作用域,在全局作用域下声明的变量是全局变量
5.3 局部作用域和局部变量: 函数内部就是局部作用域, 在函数内部声明的变量就是局部变量
<script>
function add() {
var num1 = 100;
var num2 = 200;
console.log(num1 + num2);
}
console.log(num1); // 报错,因为num1是局部作用域, 只能在add函数内访问
add();
</script>
5.4 作用域访问规则
<script>
// 作用链: 要访问一个变量, 首先从本函数开始寻找, 找不到,
就沿着作用域链一级一级向上找, 一直找到window,若没有,就把报错
var color = '红色';
function getColor() {
var color = '青色';
var color2 = '蓝色';
function test() {
var color3 = '绿色';
console.log(color);
console.log(color2);
console.log(color3);
console.log(color4);
}
test();
}
getColor();
// (2)函数外部不可以访问函数内部的变量
//console.log(color2); // 会报错
</script>
<script>
var sum = 0;
for (var i = 0; i < 5; i++) {
sum += i;
}
console.log('sum=' + sum)
console.log('i=', i); // i是全局变量,不是局部变量
if (0) {
var x = 100;
}
console.log(x); // undefined, 因为变量声明提前
</script>
(1)函数内部可以访问函数外部的变量
(2)函数外部不可以访问函数内部的变量
(3)多个作用域用作用域链进行连接
(4)没有块级作用域(区分作用域以函数作为区分条件)
作业:
轮播图链接
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
/////////////////第一步
<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css">
</head>
<body>
///////////////第二步
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide"><img src="https://static.maizuo.com/v5/upload/2fd9cd71b8b73608d28d38435f45ed48.jpg" alt=""></div>
<div class="swiper-slide"><img src="https://static.maizuo.com/v5/upload/b43a16925b3c56107bec4b866a2623ca.jpg" /></div>
</div>
<!-- 如果需要分页器 -->
<div class="swiper-pagination"></div>
</div>
////////////////第三步
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
<script>
var mySwiper = new Swiper('.swiper-container', {
loop: true, // 循环模式选项
// 如果需要分页器
pagination: {
el: '.swiper-pagination',
},
})
</script>
</body>
</html>
- 使用函数的方式重写电影列表页面, 同时加上轮播图
- 编写一个计算器(eval 用来计算)