当前位置: 首页 > news >正文

js----函数之立即执行函数

立即执行函数会被立即执行

总结:

  1.  针对初始化功能的函数,这类函数只会执行一次
  2.  只有表达式才能被执行符号执行
  3. 执行后被清除,其作用域[[scope]]也被清除,释放空间
  4. 可以传参,可以有返回值

写法:

(function (){}())  //w3c建议
//或者
(function (){})()

//带参数 
var num = (function (a,b){
    console.log(a+b)
}(123,123))

//有返回值
var num = (function (a,b){
    return a+b
}(123,123))

扩展:

  • 使用隐形转换将函数声明变为表达式 如  - 、 + 、!等
+function(){
  console.log("a")
}()
-function(){
  console.log("a")
}()
!function(){
  console.log("a")
}()
  • 复杂表达式被执行后会失去原来对函数的索引
var demo = function(){
	console.log('a')
}();
console.log(demo)

结果:
//a
//undefined

/*
 执行后function(){}被销毁,demo失去了地址索引,恢复预编译时的undefined
*/

 

错误立即函数的一些写法及原因

//-------------错误1:
function test(){
 console.log("1,2,")
}()
//结果:报错,函数声明不是表达式

//-------------错误2:
function test(a,b){
 console.log("1,2,")
}(a,b)
/*
结果:不报错,不执行 ;引擎自动变为以下格式
 function test(a,b){
  console.log("1,2,")
 }
 (a,b)
*/

//-------------正确:
(function test(a,b){
 console.log("1,2,")
}(a,b))
//结果:不报错,执行 ,

 

相关文章:

  • 闭包问题
  • js --- 面向对象之原型与原型链
  • 对象枚举以及判断数组与对象的3种方法
  • git的小白入门
  • windows如何配置mysql的环境变量
  • js的变量类型判断和类型的转换
  • vscode 常用设置和插件
  • 可迭代对象和类数组
  • js数组遍历方法总结与对比
  • PAT乙级 我要通过(1003)的详细解答过程
  • PAT乙级 成绩排名(1004) c++题解
  • PAT乙级 继续(3n+1)猜想(1005) c++题解(打表越界的段错误)
  • PAT乙级 素数对猜想(1007)c++实现
  • PAT乙级 说反话(1009)c++新手易懂版
  • 图的深度遍历(邻接表)SCAU c++
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • fetch 从初识到应用
  • HTML-表单
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • js中forEach回调同异步问题
  • leetcode-27. Remove Element
  • Linux CTF 逆向入门
  • Linux Process Manage
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Python学习笔记 字符串拼接
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 从零搭建Koa2 Server
  • 浮现式设计
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 聊聊directory traversal attack
  • 聊聊flink的TableFactory
  • 前端_面试
  • 嵌入式文件系统
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 通过git安装npm私有模块
  • 系统认识JavaScript正则表达式
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (九)信息融合方式简介
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)socket Aio demo
  • 、写入Shellcode到注册表上线
  • ./和../以及/和~之间的区别
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET Micro Framework初体验(二)
  • .NET 反射 Reflect