javascript 函数概述

函数

1.js函数的概念

函数就是把特定功能的代码抽取出来,使之成为程序中的一个独立实体。

2.函数的作用

正如函数的概念,我们可以根据需要,将特定的功能函数来包裹(封装)

3.使用函数的好处

1.函数可以在同一个程序或其他程序中多次重 复使用(通过函数名调用)

2.使程序变得更加简短清晰,提高可读性。

3,有利于系统维护。

函数讲解

函数是什么?

函数其实就抽取写好的js代码作为一个通用的代码块(封装)

作用:

减少代码冗余(过多)方便调用(提供效率提高代码的可读性)便于维护(二次修改)//js有哪些函数

1.系统函数2.内置函数3.自定义函数

函数带括号就是函数

系统函数就是系统自带的函数alert()

内置函数 Math.pow() 属于Math对象的内置函数

自定义函数 你自己写的函数,需要先书写,再进行调用

函数主要依赖于function关键字进行定义 一般的函数名以fn开头

自定义函数的三种声明方式

1.第一种声明

function 函数名(参数1,参数2...){
    函数体(需要进行的操作)
}调用 
函数名()就能进行调用

2.第二种声明

var 变量名 = function(){
    函数体
}  
var fn = function(){
    console.log('hello world')
}调用 使用变量名() 
fn()

3.第三种声明 使用new方式

var fnObj = new Function("console.log('hello function object')")
调用 fnObj()

在初始状态页面加载的时候,js会优先加载function以及对应的变量命名,但是他不会加载变量赋值的过程。

return关键字

return是用于函数里面返回数据的,没有数据返回的话,默认返回undefined。

function fu(){
    console.log( 'hello');
}
//fn调用了没有 函数名() 他就会调用
var a = fn();//调用了一遍 a是相当于fn的返回值 而不是fn这个函数
console.log(a);//undefined

形参:

形参就是在函数定义时,函数名后面的参数; 函数的形参跟变量是一样使用,且不能用var修饰

实参:

实参就是调用时,函数名后面的参数

函数的参数可以写可以不写具体要看对应的参数有没有被使用到

在函数定义的时候里面的参数名可以随便写因为他是一个形参

function add(number1){
    console.log( " hello world ');
}   //因为上述的形参没有被便用到那么我们可以省略这个参数传递

俩个数相加的方法

在调用的时候进行参数传递传递的参数必须要为实参(实际值的参数 常量)

function addToTwoNumber(number1, number2){
    return number1+number2
}
var number03 = addToTwoNumber(1,2)
console.log(number03);
var a = 10
var result =addToTwoNumber(a, 10)
console.log(result);

实操练习代码:

将符号作为参数进行传递

function computerNumber(number1, number2,sym){
    switch(sym){
        case '+':
            console.log("加执行了');
            return number1+number2
        case '-':
            console.log(减执行了');
            return number1-number2
        case '*':
            console.log('乘执行了');
            return number1*number2
        case '/':
            console.log('除执行了');
            return number1/number2
        case '%':
            console.log('取余执行了");
            return number1%number2
        default:
            console.log("参数错误");
    }
}

arguments 关键字 (参数数组)

JS中函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型,在调用函数时也未必一定要传递指

定数量的参数,原因是 ECMAScript 中的参数在内部是用一个数组(arguments)来表示的。函数接收到的始终都是

这个数组,而不关心数组中包含哪些参数(如果有参数的话)。

arg参数 arguments表示的是参数数组 他具备数组的特性 他可以接收用户传递所有参数 arguments他可以接收

任意类型的值

length属性获取对应的长度 具备下标 获取指定的元素(从0开始)

function fn()
    console.log(arguments.length);
fn(1,2,3)
fn( '1 ' ,null,undefined) //arguments他可以接收任意类型的值

求和任何参数的和

function sum(){
    //接收的所有数据都存在于arguments数组里面获取所有的数据进行求和
    //遍历对应的arguments数组
    var result = 0 //接收所有的和
    for(var i=0;i<arguments.length;i++){
        //arguments[0]取出第一个值
        result+= arguments[i]
    }
    return result
}
//调用多个参数使用,隔开
console.log( sum( 3,4,3,4,4,6));

在传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,当

形参值发生改变,而实参中的值不会变化。

function  addNum(n){
         n += 5;  //将形参+5, 不会改变实参
     }
    var  a=10;
    addNum(a);           
    console.log(a); //10

变量作用域

作用域:

        就是起作用的范围。或者说有效范围; 这里涉及到另外两个概念

局部变量:

        定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只是函数内部,另外,形参也是局部变量.

全局变量:

        全局变量就是定义在函数外部的变量,这个变量在任何函数中都有效,即作用域范围是当前文件的任何地方.

变量作用域 变量分为全局变量 作用域为全局和局部变量为对应的代码块内 (function)

全局作用域可以在局部调用 局部作用不能应用在全局

全局作用域的东西他对应的可以在局部更改 局部作用域不能全局更改

局部作用域的代码块不包含 if switch 以及 for (声明的变量还是全局变量)

在function里面声明的变量 他的作用域只存在与function 对应的全局声明的变量可以存在于全局

var a = 10//全局艾量
for(var i=0;i<10;i++){ //i++ 执行的次数比里面的多一次
    var a = 5//局部变量
    console. log(a);//5
}
console. log(a);//10
function fn2(){
    var d = 20
    console.log(d);//20
}
    var d = 30
    fn2()
    console.log(d); //30

作用域链

函数的嵌套:

函数的嵌套: 函数内部可以再包含其他函数;

函数之间允许相互调用,也允许向外调用, 但是不可以调用同级函数的嵌套函数;

关于函数的嵌套如果你调用了最外层的function那么是不会自动调用内层的function

var first = 50//全局变量
//关于函数的嵌套 如果你调用了最外层的function 那么是不会自动调用内层的function
function fn1(){
    var a = 10//局部变量
    function fn2(){
        var b = 20//局部变量
        function fn3(){
            var c = 30//局部变量
            function fn4(i
                var d = 40//局部变量
                //f未定义的找不到这个f 报错
                //如果找不到对应的变量就会出现报错
                console.log(a+b+c+d+first+f);//a是fn1 b是fn2 c是fn3 d自身的 first全局变量
                //当你的里面不包含这个变量他会向对应上层去寻找这个变量
                //这个逐层向上寻找变量的过程叫做作用域链
                //什么叫作用域就是一个变量的作用的区域
            }
            fn4()
        }
        fn3() //调用第三层的function
    }
    fn2()//调用第二层的function
}
//调用最外层的function
fn1() // 10+20+30+40+50-= 150

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值