立即执行函数
立即执行函数
针对初始化功能的函数,函数执行完成随即释放空间
立即执行函数的两种写法
(function(){}());//建议使用第一种
(function(){})();
//立即执行函数一般为匿名函数
(function (){
var a = 123;
var b = 232;
console.log(a+b);//355
}())
//当我们给函数命名,再在外部调用这个函数
(function abc(){
var a = 123;
var b = 232;
console.log(a+b);//355
}())
abc()//is not defined
//说明函数自执行之后立即被释放
//立即执行函数可以用一个变量来接返回值
var num = (function(a,b,c){
var d = a*b+c;
return d;
}(2,3,4))
console.log(num);
//函数声明
function test(){
var a = 123;
}//() 直接加括号会有语法错误
test();//只有表达式才能够被执行符号执行
//函数表达式
var test1 = function(){
console.log('a')
}()
+ function text(){
console.log('a')
}(); //加上+正 -负(* /不行)也可以加上逻辑运算符 变成 ___ &&/||/! function text(){ }
//会变成立即执行函数
//text 不再是一个函数,text is not defined
只有表达式才能够被执行符号()执行,能被执行符号执行的表达式,函数的名字会被自动忽略
function test(a,b,c,d){
console.log(a+b+c+d);
}(1,2,3,4);
//在系统识别中,他不会识别成立即执行符号();会变成如下这种形式,虽然不报错,但也不执行
function test(a,b,c,d){
console.log(a+b+c+d);
}//js语句分隔可以不写;
(1,2,3,4);
以下是容易出错的代码
function text() {
var arr = [];
//通过for循环,将数组中每一位都填充为函数,再返回数组
for (var i = 0; i < 10; i++) {
arr[i] = function () {
// arr[i]中的i一直在变,但函数体并不会立即执行,i只是被引用
//当外部引用时,才会调取i进行打印,此时for循环已执行完成,变成了10,所以之后打印10输出了10次
document.write(i + " ");
}
}
return arr;
}
var myArr = text();
for(var j=0;j<10;j++){
myArr[j]();//10打印了10次,此时才会执行函数体内的内容
}
解决方法
function text() {
var arr = [];
for (var i = 0; i < 10; i++) {
(function (j) {//立即执行函数
//形成闭包,相当于定义了一个j在里面,下面的函数直接获取到j的值,直接把下面的语句甩到数组里面
arr[j] = function () {
document.write(j + " ");
}
}(i));
}
return arr;
}
var myArr = text();
for(var j=0;j<10;j++){
myArr[j]();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南