JS复习:第七章
第七章 函数表达式
一、定义函数的方式有两种:函数声明和函数表达式。
1.函数声明:
1 2 3 | function functionName(arg0 , arg1 , arg2){ //函数体... } |
函数声明的一个重要特征就是函数声明提升,在读取代码之前会先读取函数声明。意味着可以将函数声明放在调用代码之后。
2.函数表达式:
var functionName = function(arg0 , arg1 , arg2){
//函数体...
}
创建一个函数并将它赋值给一个变量,这种情况下创建的函数叫做匿名函数。因为function后面没有标识符。函数表达式与其他表达式一样使用前必须先赋值。
二、匿名函数的作用:
1.把函数当成值来用时,可以使用匿名函数。
2.
三、闭包
闭包是指有权访问另一个函数作用域中的变量的函数。
如下代码:
function createFunction(){
var result = new Array();
for(var i = 0 ; i < 10 ; i++){
result[i] = function(){
return i;
};
}
return result;
}
会有一个明显的问题是返回的所有i值都为10,即数组的最后一个i。
解决方法是:
function createFunction(){
var result = new Array();
for(var i = 0 ; i < 10 ; i++){
result[i] = function(num){
return function(){
return num;
};
}(i);
}
return result;
}
四、私有变量
私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。在函数内部可以访问这个变量,但在函数外部则不能访问它们。如果在这个函数内部创建一个闭包,那么闭包通过自己的作用域也可以访问这些变量。有两种在对象上创建特权方法的方式。第一种是在构造函数中定义特权方法,基本模式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function MyObject(){ //私有变量和私有函数 var privateVariable = 10; function privateFunction(){ return false ; } //特权方法 this .publicMethod = function (){ privateVariable++; return privateFunction(); }; } function MyObject(){ //私有变量和私有函数 var privateVariable = 10; function privateFunction(){ return false ; } //特权方法 this .publicMethod = function (){ privateVariable++; return privateFunction(); }; } |
第二种:在私有作用域中定义私有变量或函数,同样也可以创建特权方法,其基本模式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ( function (){ //私有变量和私有函数 var privateVariable = 10 ; function privateFunction(){ return false ; } //构造函数 MyObject = function (){ }; //公有、特权方法 MyObject.prototype.publicMethod = function (){ privateVariable++; return privateFunction(); }; })(); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)