函数

347 阅读4分钟

JS中:函数可以没有输入,但是会有输出,里面也有很多内置函数可以直接调用使用。

也可以自己定义 函数作用:封装功能块,用时可以直接调用

函数定义:

函数声明:

function f(参数1){} function 声明声明 f函数名 ()函数的特殊标志 函数体{功能块}

函数表达式(变量)

函数调用:函数定义好后,只有调用了才起作用

函数参数;

形参:函数定义时,()里面写的数,相当于局部变量,作用用来接收实参传递过来的值

实参:函数调用时,()里面写的数,用来给形参传递值

函数的返回值:

通过return 返回,返回到函数调用处

如果没有给返回值,默认返回undefined

注意: 在函数体重,return 后的代码不会再执行直接从return跳转,return也叫跳转语句

命名法

小驼峰命名法:toString()

大驼峰命名法:ToString()

下划线命名法:to_string()

作用域:

在JS中,作用域分为三类:全局作用域、局部作用域、块级作用域。在函数内部会形成局部作用域,

let{}会形成块级作用域

参数的传递:

基本数据类型的数据(值传递):

就是把栈区的内容复制一份给了形参,形参和实参是一个独立的内存空间,改变形参实参不会有影响

引用数据类型(引用传递):

就是把栈区的地址复制一遍给了形参,形参和实参共同指向堆区的同一内存空间

通过改变堆区内存空间的数据,实参这个地址对应的数据也会改变

函数可以作为另一个函数的参数,这个函数可以是函数声明也可以是函数表达式

arguments

函数调用的过程实际也是实参向形参赋值的过程,实参赋值一份给形参,还会复制一份给arguments。 arguments收集了实参

arguments只是函数内部的参数(类数组),在函数外面不能访问

arguments与实参具有一一对应的关系:

当改变实参时,arguments会随之改变;反之,一样;

什么时候使用arguments和形参;

当实参非常多,需要写很多形参接收,不方便时,可以使用arguments。

当实参有特殊含义,需要特殊标识时,可以用形参标识

JS有两个容器:

数组:[1,2,3,"hello"]获取某个元素时,使用索引

对象;{name:"wangc",age:100} name 和age叫key wangc和100叫做value

返回多个返回值

JS中默认只能返回一个返回值,想要返回多个就可以使用容器。

ES6中对函数的扩展

1、函数默认值,没有实参时,使用默认值,有实参使用实参

2、传递赋值时,实参的第一个会赋给第一个形参,依次排列、、

3、如果实参个数多于形参,后面的实参就会忽略

4、如果形参个数多于实参,后面形参的值为undefined;

扩展运算符:...

rest参数:...rest 在函数定义时的形参的位置写的...

代替arguments

定义函数时...

箭头函数 function(){} var g=function(){}

特点: 1、如果形参只有一个可以不写(),只有一个才能省,其他都不能

2、只有一个带return语句 {}和return都可以不写

3、只有一个不带return语句时,{}可以不写。

4、返回了对象,把{}和return省掉时,需要给对象加();

5、没有arguments用rest来代替

执行上下文

全局代码&局部代码

局部代码:在函数里面的代码

全局代码:默认进入的

全局执行上下文,函数局部代码:

执行全局代码,产生一个全局执行上下文:只有一个;

执行函数代码时,产生一个函数局部执行上下文

每调用一次,都会产生一个,可以有多个。

执行上下文的作用:

给全局代码或局部代码提供数据,可以是变量也