问题标签 [iife]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
20 回答
191779 浏览

javascript - javascript中自执行函数的目的是什么?

在 javascript 中,你什么时候想使用这个:

对此:

0 投票
3 回答
43845 浏览

javascript - 立即函数调用语法

有一个JSLint选项,实际上是 The Good Parts 之一,它“[需要] parens around immediate invocations”,这意味着构造

而是需要写成

我的问题是——谁能解释为什么第二种形式可能被认为更好?是不是更有韧性?更不容易出错?它比第一种形式有什么优势?


自从提出这个问题后,我开始理解在函数值和函数值之间进行清晰视觉区分的重要性。考虑立即调用的结果是赋值表达式右侧的情况:

虽然最外面的括号在语法上是不必要的,但左括号给出了一个预先指示,即被分配的值不是函数本身,而是被调用函数的结果。

这类似于 Crockford 关于构造函数大写的建议——它旨在为任何查看源代码的人提供视觉提示。

0 投票
19 回答
300061 浏览

javascript - 为什么需要在同一行调用匿名函数?

我正在阅读一些关于闭包的帖子,并且到处都看到了这个,但是没有明确的解释它是如何工作的 - 每次我被告知要使用它......:

好的,我看到我们将创建新的匿名函数,然后执行它。所以在那之后这个简单的代码应该可以工作(并且确实如此):

我的问题是这里发生了什么样的魔法?我在写的时候是这么想的:

然后将创建一个新的未命名函数,如函数 ""(msg) ...

但是为什么这不起作用呢?

为什么它需要在同一行?

你能指点我一些帖子或给我一个解释吗?

0 投票
9 回答
119870 浏览

javascript - 将整个 Javascript 文件包装在像“(function(){ ... })()”这样的匿名函数中的目的是什么?

我最近读了很多 Javascript,我注意到整个文件在要导入的 .js 文件中如下所示。

这样做的原因是什么而不是一组简单的构造函数?

0 投票
4 回答
14454 浏览

javascript - 自动执行匿名 JavaScript 函数的括号位置?

我最近将json2.js的当前版本与我项目中的版本进行比较,并注意到函数表达式的创建和自我执行方式有所不同。

用于将匿名函数包装在括号中然后执行它的代码,

但现在它将自动执行的函数包装在括号中。

CMS 在解释 JavaScript 的封装匿名函数语法的接受答案中有一条评论,即“两者:(function(){})();并且(function(){}());都是有效的”。</p>

我想知道有什么区别?前者是否通过离开全局匿名函数来占用内存?括号应该放在哪里?

0 投票
7 回答
4378 浏览

javascript - What is this practice called in JavaScript?

When you wrap your JavaScript code in a function like this:

I noticed that this fixes scoping problems for me on a lot of web pages. What is this practice called?

0 投票
5 回答
174 浏览

javascript - 这个未知的 JavaScript 语法是什么?

这是 jQuery 代码吗

相当于

如果是,两者有什么区别?如果不是,第一个做什么?

编辑:

谢谢大家。大多数反应与不同的口味和样品相似

0 投票
5 回答
3536 浏览

javascript - JavaScript 自调用函数

我从 Stoyan Stefanov 的一本名为 Object Oriented JavaScript 的书的第 79 页得到了这个例子。真的不知道该做什么,我第一次运行这个程序(按回车键)它返回“未定义”。之后,按照作者的指示,我调用它a();并收到警报“Worky worky”

我的问题是

a) 我是否正确地完成了第一步?即我应该通过点击“进入/返回”来运行一个自调用程序吗?

b)如果我只是点击“进入/返回”来运行程序是正确的,为什么它会给出“未定义”的结果。作者说,这个程序拒绝引用(在第一次运行时)对函数 actualWork() 的引用?如果它返回一个引用,为什么它被认为是未定义的?它在某种程度上很重要吗?

请注意,我尝试在 jsfiddle.net 中输入代码,然后点击运行并没有发生任何事情,但是当我第一次在控制台中运行它时我得到“未定义”,然后当我执行 a(); 时出现警报。

0 投票
3 回答
12815 浏览

javascript - JavaScript 中变量阴影的正确术语是什么?

下面我们有一个IIFE,它(像任何函数一样)创建一个本地范围。在该范围内有一个parseInt功能。现在,由于浏览器中已经有一个具有该名称的全局函数,本地函数将掩盖全局parseInt函数 - 在 IIFE 内部,任何调用都parseInt将调用本地函数,而不是全局函数。(全局函数仍然可以用 引用window.parseInt。)

这有法律上的(ECMAScript 规范)或事实上的(通用)名称吗?遮遮掩掩?超载?

0 投票
6 回答
23540 浏览

javascript - Javascript自执行函数“不是函数”

我有:

当页面加载时,我的 js 会正确执行。我也有:

但是萤火虫说 Init 不是一个函数。