草庐IT

javascript - 为什么 JavaScript IIFE 需要括号?

这个问题在这里已经有了答案:Explaintheencapsulatedanonymousfunctionsyntax(10个答案)关闭6年前。我正在阅读有关JavaScriptIIFE的内容,目前为止理解的概念,但我想知道外面的括号。具体来说,为什么需要它们?例如,(function(){varmsg='IloveJavaScript';console.log(msg);}());效果很好,但是function(){varmsg='IloveJavaScript';console.log(msg);}();产生语法错误。为什么?关于IIFE有很多讨论,但我没有看到关于为什么需要括号的

javascript - 为什么要将 IIFE 分配给变量?

我一直在JavaScript和AngularJS中使用IIFE,并且一直在使用以下结构:方法一://IIFEImmediatelyInvokedFunctionExpression(function(){}());但是,我经常看到以下情况,其中变量被分配给IIFE方法二://IIFEImmediatelyInvokedFunctionExpressionassignedtodoStuffvariablevardoStuff=(function(){}());注意:这个问题不是这个模式是什么或者IIFE是什么。这特别与为什么要在IIFE上使用返回变量及其与Angular实践的关系有关。在

javascript - 使用命名立即调用函数表达式 (IIFE) 而不是注释

在JS代码中使用命名IIFE来描述和分组相关代码的优缺点是什么?我一直在使用这种“模式”为我的更多过程代码提供结构,这些代码只在一个地方执行。例子(functionhideStuffOnInstantiaton(){$('oneThing').hide().removeClass();$('#somethign_else').slideUp();$('.foo').fadeOut();}());我发现这比两者更可取://hideStuffonInstantiaton$('oneThing').hide().removeClass();$('#somethign_else').slide

javascript - IIFE 前的分号有什么用?

这个问题在这里已经有了答案:WhatdoestheleadingsemicoloninJavaScriptlibrariesdo?(6个答案)关闭9年前。我正在检查has.js的代码并对这里的初始分号感到困惑:;(function(g){//code}()(this);据我所知,它什么都不做。它不会将函数放在表达式位置,如()或!做:(function(){}())或!function(){}()。它似乎只是一个空行的换行符。这个分号的作用是什么?强制症渴望在IIFE的开始和结束之间保持对称?:)

javascript - 为什么记录命名的 IIFE 而不是同名变量?

我看到下面有人发布的代码。我对它记录的内容感到困惑。它记录函数a,而不是200。为什么?vara=1;(functiona(){a=200;console.log(a)})() 最佳答案 因为被立即调用的函数是命名的,并且该名称不能被重新分配以直接在IIFE中引用其他东西。任何命名的函数表达式也会表现出这种行为。函数名为a的函数表达式意味着直接位于函数内部的a将始终引用函数本身,即使您尝试重新分配它也是如此。如果你使用严格模式,你可以将错误显式化:'usestrict';vara=1;(functiona(){a=200;conso

javascript - 构建一个 JavaScript 库,为什么要这样使用 IIFE?

我注意到很多图书馆都使用下面的这种风格来定义他们的图书馆。我还注意到第一个自调用函数与Require.js或AMD系统有关,它们总是将工厂作为参数,我将更多地研究Require.js,一直研究Browserify。为什么主要代码被传递到括号内的第一个自调用函数的末尾,这是一个闭包,还是只是被认为是一个匿名函数,我将深入研究两者。这有什么好处?看起来作者在闭包内部传递了一个string、this和一个callback。这是否会为我的库提供一种干净安全的方式来全局化下面这个示例中的主要对象Please?(function(globalName,root,factory){if(typeof

javascript - 将参数传递给 IIFE

将参数传递给存储在变量中的IIFE的正确语法是什么?下面的例子告诉我foo没有定义,无论我是否调用函数:varbar=(function(foo){return{getFoo:function(){returnfoo;}}})(foo);console.log(bar.getFoo(1));http://jsfiddle.net/eSTkL/ 最佳答案 IIFE立即被调用。您在调用时将foo传递给它,我想它是未定义的。bar中存储的不是IIFE,而是IIFE返回的对象,它与foo没有任何关系(除了通过闭包访问它之外)。如果您希望fo

javascript - 立即调用函数表达式 (IIFE) 相对于普通函数的优势

我是javascript的新手,我读过关于themodulepattern的文章提供某种namespace并同时具有私有(private)和公共(public)成员,例如:varmodule=(function(){vars="Hello,i'mprivateandinclosure!";return{myString:s,myFunc:function(){alert(s);}};})();我确实看到了它的好处,因为它为您提供了面向对象编程的一些优势。但是我见过很多没有分配给变量的IIFE示例。与您调用的普通函数相比,这(据我所知)没有任何优势:1。国际金融学院(function()

javascript - 为什么 TypeScript 会在 IIFE 中打包一个类?

这是一个TypeScript类:classGreeter{publicstaticwhat():string{return"Greater";}publicsubject:string;constructor(subject:string){this.subject=subject;}publicgreet():string{return"Hello,"+this.subject;}}当TS以ES5为目标时,它被转译为IIFE:varGreeter=/**@class*/(function(){functionGreeter(subject){this.subject=subject;

javascript - 创建一个 JS 类 : IIFE vs return prototype

让我们看两个例子,我将在其中尝试解释我想理解的内容。varCar=function(){//InitclassfunctionCar(){};//Privatefunc/varsvarprivate={color:'red'};//Publicfunc/varsCar.prototype={newColor:function(color){private.color=color},getColor:function(){returnprivate.color}};returnCar.prototype;//returnwithprototype};varmyCar=newCar();和