day5 函数
函数
为什么要有函数
如果要在多个地方求1-100之间所有数的和,应该怎么做?
概念:当它被调用时执行的可重复使用的代码块。
什么是函数
函数的作用就是封装一段代码,将来可以重复使用。
就是函数,起个名字(函数名),在后续开发中可以反复调用
函数的定义
- 函数声明式
function 函数名(){
// 函数体
}
- 函数表达式
var fn = function() {
// 函数体
}
-
特点:
函数声明的时候,函数体并不会执行,只要当函数被调用的时候才会执行。
函数一般都用来干一件事情,需用使用动词+名词,表示做一件事情tellStory
sayHello
等
函数的调用
- 调用函数的语法:
函数名();
-
特点:
函数体只有在调用的时候才会执行,调用需要()进行调用。
可以调用多次(重复使用)
代码示例:
// 声明函数
function sayHi() {
console.log("吃了没?");
}
// 调用函数
sayHi();
// 求1-100之间所有数的和
function getSum() {
var sum = 0;
for (var i = 0; i < 100; i++) {
sum += i;
}
console.log(sum);
}
// 调用
getSum();
函数的参数
- 为什么要有参数
// 虽然上面代码可以重复调用,但是只能计算1-100之间的值
function getSum(m,n) {
var sum = 0;
for (var i = m; i <= n; i++) {
sum += i;
}
console.log(sum);
}
getSum(1,100);
getSum(1,1000);
getSum(20,200)
// 如果想要计算n-m之间所有数的和,应该怎么办呢?(根据业务的需求,n和m均会发生变化)
- 语法:
// 带参数的函数声明
function 函数名(形参1, 形参2, 形参...){
// 函数体
}
// 带参数的函数调用
函数名(实参1, 实参2, 实参3);
//函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部.
//函数调用的过程就是把实参传递给形参
-
形参和实参
- 形式参数:在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。
- 实际参数:如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。
var x = 5, y = 6;
fn(x,y);
function fn(a, b) {
console.log(a + b);
}
//x,y实参,有具体的值。函数执行的时候会把x,y复制一份给函数内部的a和b,函数内部的值是复制的新值,无法修改外部的x,y
案例
- 求1-n之间所有数的和
- 求n-m之间所有数值和
- 求2个数中的最大值
- 求3个数中的最大值
- 写一个n行的直角三角形
- 写一个n行的乘法表
- 求1-n之间所有的偶数的个数
函数的返回值
当函数执行完的时候,并不是所有时候都要把结果打印。
我们期望函数给我一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。
函数通过return返回一个返回值
返回值语法:
//声明一个带返回值的函数
function 函数名(形参1, 形参2, 形参...){
//函数体
return 返回值;
}
//可以通过变量来接收这个返回值
var 变量 = 函数名(实参1, 实参2, 实参3);
函数的调用结果就是返回值,因此我们可以直接对函数调用结果进行操作。
函数的定义:
function f1(x,y) {
return x+y;
}
//有参数,无返回值的函数
function f2(x) {
console.log(x);
}
//无参数,有返回值的函数
function f3() {
return 100;
}
//无参数无返回值的函数
function f4() {
console.log(“萨瓦迪卡”);
}
案例
- 求阶乘
- 求1!+2!+3!+…+n!
- 求一组数中的最大值
- 求一组数中的最小值
arguments的使用
JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。也就是说所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有的实参。arguments是一个伪数组,因此及可以进行遍历
- 案例
求任意个数的最大值
求任意个数的和
案例
输入一个年份,判断是否是闰年[闰年:能被4整数并且不能被100整数,或者能被400整数]
输入某年某月某日,判断这一天是这一年的第几天?
作用域
作用域:变量可以起作用的范围
全局变量和局部变量
-
全局变量
在任何地方都可以访问到的变量就是全局变量,对应全局作用域
-
局部变量
只在固定的代码片段内可访问到的变量,最常见的例如函数内部。对应局部作用域(函数作用域)
不使用var声明的变量是全局变量,不推荐使用。
变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁
总结 :
作用域:指的就是一段代码的作用范围。
全局变量 在页面中任何地方都能够访问得到的变量,拥有全局的作用域。
局部变量 只能在固定的代码片段(函数片段中)中访问到。
预解析
JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程
预解析过程:
- 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
- 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
- 先提升var
JavaScript的执行过程
var a = 25;
function abc (){
var a;
alert(a);
a = 10;
}
abc();
变量提升
-
变量提升
定义变量的时候,变量的声明(var )会被提升到当前作用域的最上面,变量的赋值不会提升。
上一篇: Oracle程序包
下一篇: Java web应用中的安全问题整理