问题标签 [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.
javascript - 高级 JavaScript:为什么这个函数用括号括起来?
我遇到了这段 JavaScript 代码,但我不知道该怎么做。为什么我在运行此代码时得到“1”?(1) 的这个奇怪的小附录是什么?为什么函数用括号括起来?
javascript - 我的立即调用函数表达式有什么问题?
我尝试在下面做一个非常简单的 IIFE,
为什么脚本警告“未定义”而不是“已定义”?
@编辑
该脚本应该按预期工作,除了:
- unintended
typeof obj.prop === undefined
是错误的,但obj.prop === undefined
应该改为使用。 当省略下面的括号时,脚本不会按预期工作,但不会从 rhino 引发语法错误。
function(_obj) {_obj.prop = 'defined';}(obj);
javascript - 如何拆分 IIFE 以适应 Java JVM/Rhino 64k 字节码限制
我想允许通过 Rhino 使用尽可能接近 jQuery 的语法进行服务器端脚本。理想情况下,我只想在服务器上使用 jQuery。
目前,Rhino + Env.js + jQuery 可以工作,但没有开启优化(我必须这样做, cx.setOptimizationLevel(-1);
因为http://bugs.sun.com/view_bug.do?bug_id=4262078)解释的 JS 严重限制了我工具的适用性我在写。
在我尝试自己做之前,我想问一下 JavaScript 专家,什么是分解封装良好的 jQuery 核心(以及我的一些以相同风格编写的 jQuery 插件)的最佳方法?即如何拆分一个函数
成功能块。
所需要的只是将函数的某些部分分成可调用的代码,这些代码在执行后将具有相同的功能。
javascript - IIFE(立即调用函数表达式)中的 Object.Prototype 方法和“使用严格”
原代码:
新代码:
正如这段代码所代表的,当我尝试:
var gitjs = new GitJs();
我被告知 GitJs 是未定义的
我到底在想什么:
- 我不想把
use strict
每个方法都放在里面。 - 如果我的代码被缩小并连接到另一个文件,我希望它能够很好地发挥作用。
- 我想使用该
.prototype
语法以便稍后继承(和代码清晰) - 我不想创建一个全局
var gitJs
变量,因为它可能会被其他人的脚本覆盖。 - 我假设用户将始终通过
new
关键字调用对象构造函数
为了记录,我知道我错了。大错特错。我似乎无法弄清楚我思维中的缺陷在哪里,我希望得到一些指导。
jquery - 在 iife 中理解 $ vs. jQuery 而不是 $
我试图了解以下之间是否有任何区别:
对比
请注意,jQuery 被替换为 $。这个可以吗?它是不是因为它不能工作而没有在任何地方使用?它有效,但也许它是非标准的?有人可以解释一下这是错误还是可以?谢谢
javascript - 更改自定义绑定处理程序,以便使用 IIFE 分配它
我有一个自定义绑定处理程序,想将其修改为 IIFE。我一直在互联网上阅读有关 IIFE 的信息,但无法将我的自定义句柄更改为 IIFE。那么如何将以下绑定处理程序更改为 IIFE
javascript - 为什么在匿名函数调用中使用 NOT 运算符?(a la Knockout 2.1.0)
可能重复:
函数前的感叹号有什么作用?
如果您查看KnockoutJS 2.1.0 的源代码,您会看到从第 7 行开始的代码结构如下:
not 运算符导致此表达式的计算结果为true
而不是undefined
,但为什么要麻烦呢?
javascript - 一些 Greasemonkey 脚本顶部的这一行是什么?
背景: 我对 C++ 有自学成才的爱好者级别的理解,这已经转化为对 javascript 的类似理解。为了更好地理解 javascript,我决定编写一个 Greasemonkey 脚本来解决 Google 如何处理来自同一域的多个结果的问题。
我写了我的剧本,而且非常简单。现在我觉得这个脚本可能对其他人有用,所以我想发布它。不过,在我这样做之前,我想确定我没有发布不负责任的代码。
我知道糟糕的垃圾收集经常被认为是扩展的问题,并且对我需要在 javascript 中做些什么来防止这种情况进行了一些研究。似乎答案是任何包含在函数中的内存都将在该函数退出时被回收。这似乎解释了为什么我查看的一些流行脚本被包装在一个原本无用的函数中。
这让我想到了这些问题:
- 我应该如何处理我的基本 javascript 函数以确保它不会泄漏内存?
这是我在许多脚本中看到的答案:
/li>在上面的代码中,第一个括号的用途是什么?这对我来说似乎是多余的。
当我试图理解该行时,我将其重写为:
/li>
这个想法是这只是调用以前未命名的函数。然而这并没有奏效,为什么呢?
我对一般答案更感兴趣,但如果需要,这里是我当前的代码: http: //pastebin.com/qQWKfnJT
javascript - IIFE 中的“这个”| 与本地范围相同吗?
如果我有 IIFE,这是否指的是本地范围?
我问是因为我需要Su.$a
在我的 IIFE 中随处可用。
但我不想打电话Su.$a
,我想打电话$a
。
和当 var 它是顶级作用域时说this.$a
的一样吗?var $a
javascript - IIFE jquery 准备好了
我正在开发一个包含大量 javascript 的 Web 项目,我们开始遇到命名空间冲突,因为我们将所有内容都添加到“$.”。
我阅读了有关命名空间的内容,并在http://addyosmani.com/blog/essential-js-namespacing/找到了这篇很棒的文章
我尝试按照建议在 IIFE 内设置命名空间,并认为我很幸运,因为该函数已经设置为
所以我将其转换为:
才发现(下班后)原来是
这意味着它都是在 jQuery 的 ready() 函数中调用的。
我想保留命名空间 IIFE,但不知道如何在 jQuery 的 ready() 函数中使用它。这可能吗?如果可以,怎么办?