JS核心-part2

什么是函数:
程序中专门保存一段可重复使用的代码段的程序结构/对象
再起一个名字。

何时:
当一段代码可能被反复使用时
都要先定义在函数中
然后反复调用函数。

形参:
i. 什么是: 专门保存函数调用时所必须的数据的局部变量。
ii. 何时: 当我们定义函数时发现,函数内有的数据不确定时,都要定义形参变量。
要求调用者在调用函数时传入必须的数据。

返回值:
i. 什么是: 函数的执行结果
ii. 何时: 如果将来函数外部调用函数的人需要获得函数的直接结果,继续做其它操作时,就要给函数定义返回值。

调用函数
var 返回值=函数名(实参值1, 实参值2, ...)
1). 在内存中找到指定名称的函数,同时将实参值一一对应的赋值给函数的形参变量。
2). 按函数体的描述,执行规定好的任务
3). 将函数的执行结果,返回到函数外部。

2. 创建函数: 3种
---
(1). 声明方式:
function 函数名(形参列表){
函数体;
return 返回值
}

回顾: 声明提前
i. 在程序开始执行前
ii. 负责执行程序的js引擎会先扫描2种:
①var声明的变量: var 变量名;
②function声明的函数: function 函数名(...){...}
iii. js引擎会将找到的声明依次提前到当前作用域的顶部,集中创建
iv. 特例: 赋值会留在原地!
---
凡是声明,
不管是声明变量,还是声明函数,
都都会被提前到当前作用域顶部集中创建。
---
凡是声明,
不管是声明变量,还是声明函数,
都都会被提前到当前作用域顶部集中创建。
---
2种声明:
变量声明: var 变量名
函数声明: function 函数名(形参列表){ … }
必须完全满足以上两种格式才能被提前
---
缺点: 打乱程序正常执行顺序
---
(2). 赋值方式创建函数
var 函数名=function(形参列表){
函数体;
return 返回值
}
---
优点: 不会被声明提前!
因为不符合函数声明的语法规定
function 函数名(形参列表){ … }
var 函数名=function(形参列表){
函数体;
return 返回值
}

结论
今后,创建函数尽量选择赋值方式,避免声明提前。

(3). 用new方式: (几乎不用)
var 函数名=
new Function("形参名1","形参名2","函数体...")

本质:js中函数也是一个对象
每个function,底层都相当于new Function()
每个创建一个新的函数对象,都有自己唯一的内存地址值
函数名只是一个普通的变量而已

结果:
1). 函数也可以像其他数据类型一样赋值和传参
2). 即使看着一模一样的两个函数定义,但是做==比较时,却是不相等的!

 

posted @ 2021-08-16 13:31  cansliang  阅读(46)  评论(0)    收藏  举报