Function类型 - javascript高级程序设计读书笔记
函数是对象,函数名是指向函数对象的指针。
函数的定义
- 函数声明
function sum (){
return sum1 + sum2;
}
- 函数表达式:
var sum = function(){
return sum1 + sum2;
}; // 末尾有分号,像声明变量一样
先定义变量sum,再将它初始化为一个函数。
[引]由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量没有什么不同。换句话说,一个函数可能会有多个名字。
- new Function
var sum = new Function("num1", "num2", "return num1 + num2"); // 不推荐
[引]从技术角度讲,这是一个函数表达式。但是,我们不推荐读者使用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规 ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。不过,这种语法对于理解“函数是对象,函数名是指针”的概念倒是非常直观的。
函数声明会在所有代码执行之前执行,就算你的声明代码写在最后一行,也会先执行同作用域的函数声明。
[引]解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。
EG: 以下代码不会报错
alert(sum(10,10));
function sum(num1, num2){
return num1 + num2;
}
因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升(function declaration hoisting)的过程,读取并将函数声明添加到执行环境中。对代码求值时,JavaScript引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码在调用它的代码后面,JavaScript 引擎也能把函数声明提升到顶部。
'function' 关键字什么时候用作 表达式,什么时候又用作 声明?
规则很简单
当js解析器看到function出现在main code flow,function被认为是声明。
当 function 作为语句(statement)的一部分出现的,都是表达式。
(可以看能不能加分号来判断,能加分号的都为语句(statement)。)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix