01-声明提前和Function
Function
1.什么是函数:
程序中专门保存一段可重复使用的代码段的程序结构/对象,再起一个名字
2.什么时候使用函数:
当一段代码可能被反复使用时,都要先定义在函数中,然后反复调用
3.如何定义函数:
3.1一般情况:
function 函数名(形参变量1,形参变量2,...){
函数体;
return 返回值;
}
/*
形参
什么是形参:
专门保存函数调用时所必须的数据的局部变量。
什么时候使用:
当我们定义函数时发现,函数内有的数据不确定时,都要定义形参变量。要求调用者在调用函数时传入必须的数据
返回值
什么时返回值:
函数的执行结果
什么时候使用:
如果将来调用函数的人需要获得函数的直接结果,继续做其它操作时,就要给函数定义返回值
*/
3.2调用函数
var 返回值=函数名(实参值1,实参值2,...)
/*
调用函数时做了什么:
1.在内存中找到指定名称的函数,同时将实参值一一对应的赋值给函数的形参变量。
2.按函数体的描述,执行规定好的任务
3.将函数的执行结果,返回到函数的外部
*/
4.创建函数: 3种:
4.1声明方式:
function 函数名(形参列表){
函数体;
return 返回值;
}
问题:会被声明提前
什么是声明提前:
1.在函数开始执行前
2.负责执行程序的js引擎会先扫描2种
①var声明的变量: var 变量名;
②function声明的函数: function 函数名(...){...}
3.js引擎会将找到的声明依次提前到当前作用域的顶部,集中创建
4.特例: 赋值会留在原地!
var声明的变量被提前
function声明的函数
注意:
1.只有function声明的函数会被提前
2.匿名函数,箭头函数不会被提前
声明提前的缺点:
会打乱程序正常的执行顺序
4.2赋值方式:
var 函数名=function(形参列表){
函数体;
return 返回值;
}
好处: 不会被声明提前,保持了程序原有的执行顺序
结论:今后,创建函数尽量选择赋值方式,避免声明提前
4.3用new方式: (几乎不用)
var 函数名=new Function("形参名1","形参名2","函数体...")
js中函数的本质:
js中函数也是一个对象
- 其实: 每个function,底层都相当于new Function()
- 每个函数都有自己唯一的内存地址值
而函数名只是一个普通的变量而已
结果:
函数也可以像其他数据类型一样赋值和传参(回调函数)
即使看着一模一样的两个函数定义,但是做比较时,却是不相等的(地址不相同)!
赋值
传参
转载自:https://juejin.cn/post/7142764494601584647