JavaScript立即执行函数

简介: 当圆括号出现在匿名函数的末尾想要调用函数时,它会默认将函数当成是函数声明。

1677579662291.png


1 立即执行函数


  • 立即执行函数必须是一个表达式(整体),不能是函数声明(了解即可):
  • 下面的这种写法会报错,因为是一个函数声明,不是一个函数表达式;
  • 当圆括号出现在匿名函数的末尾想要调用函数时,它会默认将函数当成是函数声明。


image.png


  • 当圆括号包裹函数时,它会默认将函数作为表达式去解析,而不是函数声明。


image.png


  • 下面是一个函数表达式,所以可以执行


image.png


但一般不会像这里这样


  • 一般写这个立即执行函数时会在前面加一个分号


;(function foo() {
  console.log('哈哈哈')
})()


  • 因为现在很多人写完一句 js 时是不喜欢加分号的,所以在这就会出现下面这样的问题


image.png


2 立即执行函数的应用


应用场景一: 防止全局变量的命名冲突


  • 立即执行函数和普通的代码有什么区别?
  • 在立即执行函数中定义的变量是有自己的作用域的,当要引入一些 js 文件时,文件里的变量或者其它的发生冲突该怎么避免,那就是用它了


// 在 xiaoming.js 中
(function() {
  var message = "Hello XiaoMing"
})()
// 那么引入 xiaoming.js 后就不能访问到 message 了
// 如果确实需要访问,那么 就像下面这样
var xmModule = (function() {
  var xmModule = {}
  var message = "Hello XiaoMing"
  xmModule.message = message
  return xmModule
})()
// 那么在引入了 xiaoming.js 的文件中就可以直接访问了
console.log(xmModule.message) 


应用场景二:ES5及以前的一个用途,见下例


  • 在以下代码中发现无论点击哪个按钮都是输出:‘按钮5发生了点击’


image.png


  • 为什么会这样呢?


请看下面,循环结束后,它的效果是像下面这样的,所以才会出现上面的问题


image.png


  • 该如何解决呢?就按下面这样,按钮点击后输出语句先在当前作用域中找m,没找到,就去立即执行函数的里面找,能找到,就用它的


image.png


3 立即执行函数的其它写法


  • 立即执行函数必须是一个表达式(整体),不能是函数声明(了解即可):
  • 下面的这种写法会报错,因为是一个函数声明,不是一个函数表达式;
  • 当圆括号出现在匿名函数的末尾想要调用函数时,它会默认将函数当成是函数声明。


image.png


  • 当圆括号包裹函数时,它会默认将函数作为表达式去解析,而不是函数声明。


image.png


  • 还有其它的,不会那样用,这里就不写了
目录
相关文章
|
2月前
|
前端开发 JavaScript 开发者
揭秘JavaScript魔法三剑客:call、apply、bind,解锁函数新世界,你的前端之路因它们而精彩!
【8月更文挑战第23天】在 JavaScript 的世界里,`call`、`apply` 和 `bind` 这三个方法常常让新手感到困惑。它们都能改变函数执行时的上下文(即 `this` 的指向),但各有特点:`call` 接受一系列参数并直接调用函数;`apply` 则接收一个参数数组,在处理不确定数量的参数时特别有用;而 `bind` 不会立即执行函数,而是创建一个新版本的函数,其 `this` 上下文已被永久绑定。理解这三个方法能帮助开发者更好地运用函数式编程技巧,提升代码灵活性和可维护性。
29 0
|
6天前
|
JavaScript 前端开发 安全
JavaScript函数详解
JavaScript函数的详细解析,包括函数的定义和调用方式(如一般格式、匿名函数、构造函数、自调用函数、箭头函数和严格模式)、函数参数(arguments对象、可变参数、默认参数值)、闭包的概念和应用实例。
JavaScript函数详解
|
5天前
|
JavaScript 前端开发
JavaScript函数可以返回两个值
JavaScript函数可以返回两个值
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-函数的返回值
关于JavaScript函数返回值的基础知识。
23 9
JavaScript基础知识-函数的返回值
|
5天前
|
自然语言处理 分布式计算 JavaScript
JavaScript函数
JavaScript函数
|
15天前
|
JSON JavaScript 前端开发
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
|
9天前
|
JSON JavaScript 数据格式
手写JS实现深拷贝函数
本文介绍了如何实现一个深拷贝函数`deepClone`,该函数可以处理对象和数组的深拷贝,确保拷贝后的对象与原始对象在内存中互不干扰。通过递归处理对象的键值对和数组的元素,实现了深度复制,同时保留了函数类型的值和基础类型的值。
15 3
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-函数的参数
关于JavaScript函数参数基础知识的介绍。
18 4
JavaScript基础知识-函数的参数
|
6天前
|
缓存 JavaScript 前端开发
了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
该文章详细讲解了JavaScript中的作用域、闭包概念及其应用场景,并简要分析了函数柯里化的使用。
了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
|
9天前
|
前端开发 数据可视化 开发者
D3.js 内置的动画函数
D3.js 内置的动画函数