函数概述

函数 实际就是多行代码的抽取(多行代码会构成特定的功能)(方法)

函数的优点

减少冗余代码(重复的代码放在函数里面 在需要的时候调用)函数封装(特定的一些代码使用函数来包
起来),
提高了代码的可维护性及可阅读性

函数的分类

  • 系统函数 window里面的所有函数都属于系统函数 (console.log() alert() prompt()...)
  • 内置函数 所有的内置对象里面的函数 都叫内置函数 (Math.pow())
  • 自定义函数( 自己定义的函数)
  • 内置函数和系统函数我们更关注于他的使用 自定义函数(定义以及使用)

 

 

定义函数

 

function 函数名(){

函数体;

}

 

说明:

function 定义函数关键字,

“函数名” 是你给函数取的名字,

“函数体” 是为完成特定功能的代码。

函数名 必须是唯一的

函数定义好后,不能自动执行,需要调用它,直接在需要的位置写函数名。

函数调用

函数定义好后,不能自动执行,需要调用它,直接在需要的位置写函数名。
定义函数方法:

1. 第一种情况,在<script>标签内调用

function 函数名(){

函数体;

}

 

函数名 ();// 函数调用,直接写函数名
2. 在 HTML 文件中调用,例如通过点击按钮后用定义好的函数
如:<input type=“button” value=“click” οnclick=“add() ”/>

函数调用

创建函数
function 函数名( )

{

语句;

}

调用函数
函数调用一般和表单元素的事件一起使用,调用格式为:
事件名=“函数名” ;

四.匿名函数
没有名字的函数就是匿名函数
function() {

函数体;

}

var sing = function(){

函数体;

}

作用域

在函数内部声明的变量(局部变量),在函数外部并不能访问
function demo() { var a="外面不能访问我!"; }

//alert(a);//出错,没有声明变量a

demo();//执行函数

alert(a);//仍然出错

函数外部声明的变量(全局变量),在函数内部是可以访问的

function demo() {

//在一个脚本中,使用function关键字声明的具有名称的函数在脚本中出现的次序是任意的,并不存在先后之分

alert(globalVar);

}

//demo();//出错,执行时变量globalVar还没有声明

var globalVar="Hello!";

demo();//输出Hello!

return关键词

return 返回对应的数据的 他是在函数内容进行数据返回的(当你调用了return操作后 后面的内容将不
再执行)
如果没有return关键词 返回的一个undefined的值

function sum(a,b){
return a+b
console.log('不会执行的代码')
}
console.log(sum(1,2))//返回的对应的1+2的结果
function sayHi(){
console.log('hi')
}
console.log(sayHi()) //undefined

函数的arguments(参数数组 参数的集合)

如果函数里面套了一个函数,而且有return。那么有两种方法调用里面嵌套的函数

function f1() {
    var n = 99;
    function f2() {
        alert(n);
    }
    return f2;
    //因为返回了f2,所以调用f1()时,返回的是函数f2
}

1,把函数赋值f1给变量,那么调用变量时相当于调用f1的返回值——函数f2

function f1() {
    var n = 99;
    function f2() {
        alert(n);
    }
    return f2;
    //因为返回了f2,所以调用f1()时,返回的是函数f2
}

2,在f1()后面加个(),表示再一次调用返回值

function f1() {
    var n = 99;
    function f2() {
        alert(n);
    }
    return f2;
    //因为返回了f2,所以调用f1()时,返回的是函数f2
}

Dom的简单操作

//通过输入框输入数值判断对应的奇偶并打印
<input id="number" type="text">
<button id="btn">判断奇偶</button>
<script>
function handlerClick(){
//拿到input框里面的内容 获取到input框
var inputValue = document.getElementById('number').value //string类型
// console.log(typeof inputValue); 如果是+法操作必须要先转类型
//判断奇偶的操作
if(inputValue%2==0){
console.log('当前为偶数');
}else{
console.log('当前为奇数');
}
}
//首先需要点击按钮 获取按键 加点击事件
//事件触发自动调用对应的函数 (事件驱动)
document.getElementById('btn').onclick = handlerClick
</script>

递归算法

递归可以完成所有循环做的事情 (但是递归的效率较低)
递归三要素

  • 找规律
  • 找临界值(没有规律的值)return
  • 自己调自己(在函数内部调用自己的函数)
<script>
        // 1, 计算1+2+3+…+100的和
        // 1 3 6 10 15 21 ==> 当前位数+前面的值
        function fn(n){
            if(n==1){
                return 1
            }else{
                return n+fn(n-1)
            }
        }
        console.log(fn(100));
        // 2, 输入一个n,打印n个hello world
        // 1. hello world
        // 2.  hello world  hello world
        // 3.  hello world  hello world  hello world
        function fn1(n){
            if(n==1){
                return 'hello world \n'
            }else{
                return fn1(n-1) + 'hello world \n'
            }
        }
        console.log(fn1(100));