声明提前和Function

本文详细介绍了函数的概念、何时及如何使用函数,包括定义、调用及创建函数的不同方式,并探讨了函数在JavaScript中的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()
  • 每个函数都有自己唯一的内存地址值

而函数名只是一个普通的变量而已

结果:

函数也可以像其他数据类型一样赋值和传参(回调函数)

即使看着一模一样的两个函数定义,但是做比较时,却是不相等的(地址不相同)!

赋值

传参

## 最后 整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。 ![](https://img-blog.csdnimg.cn/8326170d994a40c38c9c982807b5c454.jpeg#pic_center) **有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享**

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

### JavaScript 中 `function` `bind` 的区别及用法 #### 函数定义与调用方式 在 JavaScript 中,函数是一级公民,可以通过多种方式进行定义调用。最常见的方式是使用函数声明或表达式来创建一个函数: ```javascript // 函数声明 function greet(name) { console.log(`Hello, ${name}!`); } // 函数表达式 const farewell = function (name) { console.log(`Goodbye, ${name}`); }; ``` 当涉及到改变函数内部的 `this` 值时,则需要借助其他方法。 #### 使用 `bind` 方法绑定上下文 `bind` 是 JavaScript 中用于永久性设置函数执行环境的方法之一。它返回一个新的函数实例,在每次被调用时都具有指定的第一个参数作为 `this` 上下文,并允许预先设定部分传入参数[^1]。 考虑下面的例子展示如何利用 `bind` 来固定某个对象为特定函数内的 `this`: ```javascript function show(sex) { console.log("普通函数" + sex); console.log(this.name, this.age, '--'); } var person = { name: "aa", age: 14 }; let boundShow = show.bind(person, '不明'); boundShow(); // 输出:"普通函数不明 aa 14 --" ``` 这里可以看到,即使后续不再显式提供第一个参数 (`person`) 或者第二个参数 (`sex`) ,由于已经绑定了这些值给新产生的函数 `boundShow()` , 执行该函数会自动应用之前固定的参数列表[^2]。 因此,`bind` 不仅能锁定 `this` 关键字所指向的对象,还可以提前填充一些必要的输入参数,使得最终形成的闭包更易于管理重用。 #### 主要差异总结 - **临时 vs 永久**: 对于像 `call` `apply` 这样的方法而言,它们是在实际调用过程中动态地指派 `this` 给目标函数;而 `bind` 创造了一个新的带有预设 `this` 及前置参数的新版本原函数副本。 - **立即执行 vs 返回新函数**: 当采用 `call` / `apply` 调用模式时,操作会在当前语句中立刻完成并给出结果;相反地,`bind` 并不会马上触发任何行为而是构建好准备就绪的状态等待进一步指令。 综上所述,理解何时选用哪种技术手段取决于具体应用场景的需求——如果希望即时影响现有流程则倾向于前者;要是追求灵活性更高的解决方案以便稍后再做处理的话,那么后者将是更好的选择[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值