首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自调用函数的括号表示法是否在Javascript中有用?

当然有用!在 JavaScript 中,自调用函数(也称为 IIFE,即 Immediately Invoked Function Expression)是一种非常常见的创建函数的方式。它的作用是允许你在需要时动态地创建一个函数,并且可以避免全局变量的污染,将函数的作用域限制在其自身的作用域中。

自调用函数的括号表示法可以写成如下形式:

代码语言:javascript
复制
(function () {
  // 函数体
})();

在这个括号中,可以包含任何合法的 JavaScript 代码,包括变量定义、函数定义、条件语句等等。当你在代码中使用自调用函数时,它会被立即执行,并且不会创建任何新的作用域。

下面是一个简单的示例:

代码语言:javascript
复制
(function () {
  var count = 0;
  console.log(count);

  function increment() {
    count++;
    console.log(count);
  }

  increment();
  increment();
})();

这个代码中,我们定义了一个自调用函数,其中包含了一个变量定义和一个函数定义。当我们调用这个函数时,它会立即执行,并且输出 0 和 1。

需要注意的是,自调用函数的作用域仅限于其自身的作用域中。也就是说,如果你在自调用函数中定义了一个变量或函数,它们只能在自调用函数内部访问,无法在函数外部访问。这是因为自调用函数的作用域被限制在其括号内部,而括号之外无法访问。

总之,自调用函数是一种非常实用的 JavaScript 技巧,可以帮助你在需要时动态地创建函数,并且可以避免全局变量的污染。如果你在使用 JavaScript 编程时遇到了问题,不妨试试使用自调用函数来解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

立即执行函数表达式(IIFE)

因此,听到很多次比较流行却容易产生误导 JavaScript 术语“执行匿名函数”之后,最终我决定把我想法写成一篇文章。... JavaScript ,每一个函数执行时都会产生一个新执行环境。由于函数定义变量和函数只能在内部访问而不能被外部访问。...因为 JavaScript 括号内不能包含函数声明,在这一点上,当解析器遇到 function 关键字,它会以函数表达式而不是函数声明去解析它。...因为它没有 // 标识符, 必须使用 `arguments.callee` 属性 (它 // 表示当前执行函数) 来调用自身。...// // 如同上面 "关于括号注意事项" 中提到一样, 尽管括号函数 // 表达式不是必须添加, 但是按照习惯还是应该添加括号, // 因为这可以更清晰表示出赋值给一个变量是 // 函数

91550

JS对象那些事儿

JavaScript对象创建方式上有所不同。不需要非得用class创建,并且可以使用字面量表示声明。 对象创建 我们可以JavaScript以多种方式创建对象,让我们来看看都有哪些。 1....注意:上面的学生对象键可以通过点表示访问,即student.id,student.name或通过方括号表示,即学生['id'],学生['姓名']等 2. Object.create()。...注意:创建对象最佳方法是通过字面量表示,因为它在源代码占用空间更少。...它可以清楚地识别出发生了什么,所以使用new Object(),你实际上只是输入更多(理论上,如果没有被JavaScript引擎优化)和进行不必要函数调用。...此外,字面量表示创建对象,并在同一行代码中分配属性,而其他代码则不然。 如何添加/更新和删除对象属性 如前所述,可以通过点 或 括号表示添加对象属性。让我们看一个例子。 ?

2.4K10
  • JavaScript 编程精解 中文第三版 六、对象秘密

    方法通常会在对象被调用时执行一些操作。将函数作为对象方法调用时,会找到对象对应属性并直接调用。当函数作为方法调用时,函数体内叫做this绑定自动指向它上面调用对象。...可以声明括号内写入任意数量方法。 一个名为constructor对象受到特别处理。 它提供了实际构造器,它将绑定到名称"Rabbit"。 其他函数被打包到该构造器原型。...这会导致属性名称求值,就像方括号属性访问表示一样,这允许我们引用一个持有该符号绑定。...6.12 instanceof运算符 在有些时候,了解某个对象是否继承某个特定类,也是十分有用JavaScript 为此提供了一个二元运算符,名为instanceof。...通过将属性放到它们原型,可以充分利用这一点,给定类型所有值原型中分享它们属性。 class表示提供了一个显式方法,来定义一个构造器及其原型。

    1.7K60

    使用普拉特解析解析复杂算术表达式

    ,它检测跟着return关键字后面的是否是数字字符串,如果不是,那表示语法出错,如果是,那么再判断数字后面是否以分号结尾,如果这些条件都满足的话,那表明当前解析到代码语句确实符合return语句语法规定...此外,表达式还可以是异常复杂形式表现,例如:5 * add(5,6) + 3, add(add(5,3), add(6,7)), 前面表达式在运算包含函数调用,后面表达式是函数调用又包含着函数调用...我们这里就采用Pratt发明算法,名为“顶向下操作符优先级解析”来解析Monkey语言算术表达式,以下是该算法描述链接,大家可以点击阅读: http://crockford.com/javascript...函数里,它调用parseExpression来做解析,在后者实现,它就是非常简单拿着当前token到函数表里去查询,拿到对应解析函数后直接执行就可以了,调用这个函数时传入了一个参数叫precedence...从这一节看来,普拉特解析似乎只处理了两种非常简单算术表达式情况,在后面的章节,我们会看到该方法解析非常复杂表达式,例如含有多层括号函数间套调用,运算符优先级和前缀序变化等棘手情况时,普拉特分析将产生巨大解析威力

    1.4K20

    JavaScriptIIFE(即时执行方法)

    本文将详细介绍IIFE实现和用途 实现   函数跟随一对圆括号()表示函数调用 //函数声明语句写法 function test(){}; test(); //函数表达式写法 var test =...javascript,每一个函数在被调用时候都会创建一个执行上下文,函数内部定义变量和函数只能在该函数内部被使用,而正是因为这个上下文,使得我们调用函数时候能创建一些私有变量。...问题核心 现在我们定义了一个函数(function foo(){}或者var foo = function(){}),函数名后加上一对小括号即可完成对该函数调用,比如下面的代码: JavaScript...一个表达式后面加上括号表示该表达式立即执行;而如果是一个语句后面加上括号,该括号完全和之前语句不搭嘎,而只是一个分组操作符,用来控制运算优先级(小括号先运算)。...最后旁白:模块模式 立即执行函数模块化也大有用处。用立即执行函数处理模块化可以减少全局变量造成空间污染,构造更多私有变量。

    1.4K50

    对象扩展

    # 属性简洁表示 ES6 允许括号里面,直接写入变量和函数,作为对象属性和方法。这样书写更加简洁。...把它们放在大括号里面输出,就变成了对象简洁表示,每组键值对前面会打印对象名,这样就比较清晰了。 注意,简写对象方法不能用作构造函数,会报错。...,因为对于 JavaScript 引擎来说,这里super都没有用在对象方法之中。...(...args) // 函数或对象方法调用 下面是判断对象方法是否存在,如果存在就立即执行例子。 iterator.return?....() 上面代码,iterator.return如果有定义,就会调用该方法,否则直接返回undefined。 对于那些可能没有实现方法,这个运算符尤其有用

    1K20

    最新前端初中级面试题合集一,你确定不看一看嘛

    方案二:float 自身浮动 centerdiv需要放到后面 自身浮动原理就是对左右使用float:left和float:right,float使左右两个元素脱离文档流,中间正常文档流,使用...ainimation实现动画效果主要由两部分组成: 通过类似Flash动画中帧来声明一个动画; animation属性调用关键帧声明动画。...[img](data:image/svg+xml;utf8,) 第七章 函数[执行] [传参] [return] getComputedStyle() 函数执行 函数执行方式,即创建立即调用一次...// 函数用小括号包起来,然后后面加小括号 函数后面加小括号,然后函数前面加 + - ~ !...1秒调用执行一次第一个函数里面的内容 1) 一般使用 var a = 0; setInterval(function () { a++; console.log(a) // 每隔一秒打印a 并且a

    3.6K20

    JavaScript语言精粹【数组、正则表达、JSON、JSLint】

    判断是否为数组 JavaScript对数组和对象区别是混乱,typeof运算符结果都为'object' 自定义is_array函数弥补缺憾: var is_array = function...JavaScript没有多维数组,但其支持元素为数组数组。 五、正则表达式 JavaScript语法借鉴Java,函数借鉴Scheme,原型继承借鉴Self,正则表达式借鉴Perl。...:表示一个非捕获型分组 六、JSON JSON有6种类型值:对象、数组、字符串、数字、布尔值和null。 JSON对象是一个容纳“名/值”对无序集合。名字可以是任何字符串。...使用eval函数可以把一段JSON文本转化成一个有用数据结构: var myData = eval('('+ myJSONText +')'); 解释;用圆括号把JSON文本括起来是一种避免JavaScript...JavaScript不允许以左花括号“{”开始,因为那会与块语句产生混淆。“()”在此处作为表达式分组运算符,能对包围在其中表达式进行求值,能正确识别对象字面量。

    49621

    Javascript编程风格

    这一点,对于Javascript这种语法自由度很高、设计不完全成熟语言尤其重要。 一、大括号位置 绝大多数编程语言,都用大括号({})表示区块(block)。...二、 圆括号括号(parentheses)Javascript中有两种作用,一种表示调用函数,另一种表示不同组合(grouping)。我们可以用空格,区分这两种不同括号。...规则2:调用函数时候,函数名与左括号之间没有空格。 规则3:函数名与参数序列之间,没有空格。 规则4:所有其他语法元素与左括号之间,都有一个空格。...三、分号 分号表示语句结束。大多数情况下,如果你省略了句尾分号,Javascript会自动添加。   ...另外一种情况是,有些程序员喜欢同一行赋值多个变量:   var a = b = 0; 他以为,这行代码等同于   var a = 0, b = 0; 实际上不是,它真正效果是下面这样:

    85360

    JavaScript 编程精解 中文第三版 十二、项目:编程语言

    绑定名由任何非空白字符组成,并且语法不具有特殊含义。 应用书写方式与 JavaScript 中一样,也是一个表达式后添加一对括号括号可以包含任意数量参数,参数之间使用逗号分隔。...所有运算符(比如>) Egg 中都是绑定,但是可以像其他函数一样调用。...当解析子表达式时(比如应用参数),可以再次调用函数,返回参数表达式和剩余字符串。剩余字符串可以包含更多参数,也有可以是一个表示参数列表结束括号。 这里给出部分解析器代码。...接下来,我们从程序字符串删去匹配部分,将剩余字符串和表达式对象一起传递给parseApply函数。该函数检查表达式是否是一个应用,如果是应用则解析带括号参数列表。...若应用有特殊形式(比如if),我们不会求解任何表达式,而是将表达式参数和环境传递给处理这种形式函数。如果是普通调用,我们求解运算符,验证其是否函数,并使用求值后参数调用函数

    68320

    不一样JavaScript

    函数,入参后返回计算后值,并打印到控制台上,这我相信大家都知道;但是这段代码执行过程到底是否按照书写行顺序执行?...:有限替换产生式右侧非终结符; 语法分析器按照工作方式来划分,顶向下分析底向上分析 顶向下分析使用左推导方式构建AST,常用分析算法工具:递归向下分析器、LL语法分析器; 而底向上分析使用右推导方式构建...4.3.1 ESTree规范 ESTree描述 :> 表示是子类型关系,结果是产生了新类型; extend 表示没有产生新类型,只是对原来类型扩展,也就是添加了新属性, 或者对原来属性值进行修改...)}) 可多次调用traverse对AST进行不同业务处理 几个关键函数调用 transfrom.js(将vue代码转小程序代码)文件处理第二步:将methods属性全部移到外面并且删除methods...完成这样编译需要6步 将箭头函数格式化成AST 从箭头函数AST中提出变量 add和箭头函数形参保存备用 判断箭头函数主体=>后是否有{} 如果有花括号则直接作为新生成es5函数申明主体; 如果没有花括号则利用

    46320

    JavaScript 编程精解 中文第三版 四、数据结构:对象和数组

    有趣是,虽然我们没有调用toUpperCase时传递任何参数,但该函数访问了字符串"Doh",即被调用属性所属值。我们会在第 6 章阐述这其中原理。...这些在编程很常见 - 你可能还记得前一章函数调用栈,它是同一个想法实例。 对象 回到松鼠人示例。 一组每日日志条目可以表示为一个数组。...该函数使用它来确定,对于某一天,感兴趣事件名称是否事件列表。...如果之前有其他参数,它们值不是该数组一部分。 当它是唯一参数时,如max那样,它将保存所有参数。 你可以使用类似的三点表示,来使用参数数组调用函数。...流行序列化格式称为 JSON(发音为“Jason”),它代表 JavaScript Object Notation(JavaScript 对象表示)。

    1.9K100

    javascript基础知识

    访问person属性和方法,可以使用如下方式: person.age // 点号访问 person["age"] //括号表示 也可以一个对象来作为另一对象值,例如修改personname...然后, 可以根据需要, 使用点或括号表示向此对象添加属性和方法 person1.name = 'Chris'; person1['age'] = 38; person1.greeting = function...使用javascript原型 javascript函数可以有属性。...毕竟构造器是一个函数,故可以通过圆括号调用;只需在前面添加 new 关键字,便能将此函数作为构造器使用。...第一个参数指明了您运行这个函数时想对此函数中原本this指定值,也就是说,您可以重新指定您调用函数里所有“this”指向对象。这里指定了Personthis其实是Teacher示例.

    26720

    用匿名函数定义函数_c语言最先执行函数

    函数表达式,创建函数叫做匿名函数,因为function关键字后面没有标识符。 2.匿名函数调用方式 匿名函数,顾名思义就是没有名字函数。...上面的函数表达式创建,实际上是创建一个匿名函数,并将匿名函数赋值给变量 add,用 add 来进行函数调用调用方式就是变量 add 后面加上一对括号(),如果有参数传入的话就是 add(1,2...还有一种匿名函数调用方式是:使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表)。...经函数声明包含在一对圆括号表示它实际上是一个函数表达式。而紧随其后另一对圆括号会立即调用这个函数。...那为什么a =function(){}() 这种表示方法可以让编译器认为这个是一个函数表达式而不是一个函数声明? 3.执行匿名函数 执行函数,即定义和调用合为一体。

    1K20

    JavaScript 基础

    JavaScript 是一种轻量级,解释型,有着函数优先 (First-class Function) 编程语言,虽然它是作为开发 WEB 页面的脚本语言而出名,但是很多非浏览器环境也使用 JavaScript...(variable),变量是使用 var 关键字定义一个存储空间,将直接量储存起来,方便调用JavaScript 变量是松散类型(弱类型),可以用来保存任何类型数据, C 语言当中,我们定义整型变量会使用到...,键值对以 : 相隔,属性间用逗号分隔,最后一个属性逗号可省略,对象属性访问方式有两种:① 点访问;② 括号访问var o = {};var btnList = document.getElementsByTagName...,因为, JavaScript 当中,小括号 () 作用是提升优先级;括号 [] 指的是数组;大括号 {} 指的是对象NaNNaN = not a number一般在数学表达式计算失败情况下返回...,等号运算符 == 和 === 不能被用来判断一个值是否是 NaN,必须使用 Number.isNaN() 或 isNaN() 函数执行比较之中:NaN,也只有NaN,比较之中不等于它自己获取元素

    1.2K50

    编写可维护JavaScript

    多行或单行注释之前 • 方法内逻辑片段之间插入空行,提高可读性 F.命名 1.变量和函数 • 变量名应当总是遵守驼峰大小写命名(小驼峰,如myName...、try...catch...finally 2.推荐使用java规范,左花括号放置第一句代码末尾 B.块语句间隔 1.推荐左圆括号之前和右圆括号之后各添加一个空格 C.switch语句 1.缩进...2.函数声明不应当出现在语句块之内 C.函数调用间隔 1.函数名和左括号之间没有空格 D.立即调用函数 1.为了让立即执行函数能够被一眼看出来,可以将函数用一对圆括号包裹起来 E.严格模式 1....相反,所有的这些代码都有些话于一个表示执行一个任务或发布一个接口函数。可以用一个名称来表示这个模块,同样这个模块可以依赖其他模块。...代码某个特殊之处计划一个失败总比要在所有的地方都预期失败简单多 B.JavaScript抛出错误 throw new Error(“Something bad happened.”)

    84810

    Python和JavaScript使用上有什么区别?

    如何在Python命名变量 Python推荐使用蛇形命名(snake_case)。 根据Python样式指南: ž 变量名遵循与函数名相同约定。...函数参数数量 Python ,传递给函数调用参数数必须与函数定义定义参数数相匹配。如果不是这样,就会发生异常。 JavaScript,这不是必需,因为参数是可选。...Python调用了初始化新实例构造函数init (带有两个前导和尾随下划线)。创建类实例以初始化其属性时,将自动调用此方法。其参数列表定义了创建实例必须传递值。...JavaScript,构造函数方法被调用,constructor并且它还具有一个参数列表。 ?...Python和JavaScript方法 Python,我们使用def关键字,其名称和括号参数列表定义方法。此参数列表以参数开头,self以引用正在调用该方法实例。

    4.8K20

    JavaScript 权威指南第七版(GPT 重译)(三)

    使用方括号表示时,我们已经说过方括号表达式必须求值为字符串。更精确说法是,表达式必须求值为字符串或可以转换为字符串或符号值(§6.10.3)。...标识符必须直接输入到你 JavaScript 程序;它们不是一种数据类型,因此不能被程序操作。 另一方面,当你使用[]数组表示访问对象属性时,属性名称表示为字符串。...这个简短示例展示了使用数组表示访问对象属性时灵活性。这段代码可以使用点表示重写,但有些情况下只有数组表示才能胜任。...8.1.3 箭头函数 ES6 ,你可以使用一种特别简洁语法来定义函数,称为“箭头函数”。这种语法类似于数学表示,并使用=>“箭头”来分隔函数参数和函数主体。...当我们定义它函数之外调用该嵌套函数代码最后一行第二对括号)时会发生什么? 记住词法作用域基本规则:JavaScript 函数定义它们作用域中执行

    21710
    领券