又到了熟悉的函数,看了下发现和Python没太大区别...挺幸运的,所以前100多个视频学习起来一点都不吃力
JS函数
概念:
在JS里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码可以需要大量重复使用.虽然for循环语句也能实现一些简单的重复操作,但是比较具有局限性,此时我们就可以使用JS中的函数.
函数:
就是封装了一段可被重复调用执行的代码块,通过次代码可以实现大量代码的重复使用.
函数的使用:
1.声明函数 2.调用函数
声明函数
function 函数名 ( ) {
函数体
}
注意: 声明函数本身并不会执行代码,只有调用函数时才会执行.
函数的封装
带有形参和实参的函数
// 声明函数
function 函数名 (形参1, 形参2...) {
函数体
}
// 调用函数
函数名(实参1, 实参2...) 用函数
形参和实参
参数 | 说明 |
---|---|
形参 | 形式上的参数,函数定义时传递的参数,当时并不知道是什么 |
实参 | 实际上的参数,函数调用时传递的参数,实参是传递给形参的. |
形参和实参个数不匹配
在JS中,形参的默认值是undefined.
函数的返回值 return
function 函数名 ( ) {
return 需要返回的结果
}
函数名( )
return 终止函数
没有return,函数返回的结果是undefined.
arguments的使用(只有函数有)
当我们不确定有多少个参数传递的时候,可以用arguments来获取.在JS中,arguments实际上它是当前函数的一个内置对象.所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参.
arguments其实是个伪数组:
现在我们将所有的实参存储在arguments里,我们将他打印出来,符合我们上面说的伪数组的特点.
案例:用函数翻转数组
函数是可以相互调用的
function fn1 ( ) {
函数体
fn2( )
}
function fn2 ( ) {
函数体
}
fn1( )
这个就是调用函数的例子.
函数的两种声明方式:
作用域
通常来说,一段程序代码中所用到的名字并不总是有用的,而限定这个名字的可用性的代码范围就是这个名字的作用域,作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了命名的冲突性.
变量的两种类型
1.全局变量 2.局部变量
全局变量:
图中的num就是全局变量,在函数中也能使用.
局部变量:
这张图中的num就是局部变量,只能在函数内部使用,外面是用不了的.
注意!
从执行效率看全局变量和局部变量
JS中没有块级作用域,JS的作用域有全局作用域和局部作用域,现阶段我们没有块级作用域,JS也是在es6得到时候新增的块级作用域.
比如说:
JS就可以在外面调用num
作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值,这种结构我们称为作用域链,就近原则
num是先在fn函数(近)中找,没有的话就再返回上一级,到全局变量(远)中去找.