Tag: iife

节点的模块导出和IIFE混淆

我一直在玩节点和Javascript的IIFE和我有点困惑节点的modules.exports和IFFE如何在Javascript中工作。 (function (Calculator) { var calculator = function () { var currentValue = 0, add = function (num) { return currentValue += num; }; return { current: currentValue, add: add }; }(); module.exports = calculator; }(module.exports)); 上面的代码导致我的testing通过,当我使用line module.exports = calculator; 导出模块。 如何当我使用参数计算器=计算器 (注意的情况下)导致我的testing都失败? 我认为Calculator (参数)是指module.exports (传入的值? 简而言之: 计算器=计算器; //不起作用 module.exports = calculator; //工作

如何在Node.js中同步呼叫

我有以下代码片段: var array = [1, 2, 3]; var data = 0; for(var i=0; i<array.length; i++){ asyncFunction(data++); } console.log(data); executeOtherFunction(data); 我期待数据的价值为3,但我认为它是由于asyncFunction 0。 所有asyncFunction调用完成后,如何调用executeOtherFunction ?

在node.js(Windows)中对IIFE的奇怪观察

以下行为是否适用于nodejs? 它看起来对我来说是越野车。 如果不是我错过了什么? var abc = function(){ console.log("hello"); } (function(){ console.log("welcome"); })(); 我得到以下例外 TypeError: undefined is not a function at Object.<anonymous> (C:\node\main.js:8:3) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Function.Module.runMain (module.js:501:10) at startup (node.js:129:16) at node.js:814:3 如果我改变代码 var abc = function(){ console.log("hello"); } (function(){ console.log("welcome"); }()); 它产生 欢迎你好 我不得不相信节点parsing错误地假定嵌套的IIFE(function(){…})())首先被执行,而IIFE的和(outer)会触发它上面的函数定义的执行(如果我引入一个abc定义和IIFE之间的注释行)。

立即调用函数expression式导致错误?

有人可以解释为什么会发生? 如果我在像test.js这样的文件中写这样的东西, const anyObject = {} (function(){ console.log('hello world!') }()) 使用$node test.js通过控制台运行它 然后在控制台,一个hello world! 将会被打印出来,但是跟着这个: TypeError: (intermediate value) is not a function 我不知道到底发生了什么,我想不知道节点是否将函数expression式作为函数调用expression式来使用? 我正在使用节点v6.9.1

有没有什么理由使用IIFE来定义module.exports?

我的团队没有任何经验丰富的JS开发人员,但是我们正在Node中编写一个库,并从一个真正的JS开发人员那里得到了一个build议:“我们应该让js更模块化 – 不要污染全局命名空间并使其更具可读性对新来者“,并告诉我们要做到以下几点: module.exports = (function(){ return { nameToExpose: functionToExpose … }; })(); 而不是 module.exports.nameToExpose = functionToExpose; 这有什么意义呢? 后者不做任何本地声明,这些声明将被IIFE所限定,即使这样做,它们也将是模块文件的本地模块,而不是整个程序的全局对象。 一些谷歌search和点击这个网站没有出现在这个特定问题上的任何答案,虽然还有许多其他解释我已阅读(以及上面的评论中概述)的IIFEs。 一些testing肯定揭示了后者实际上并没有把functionToExpose放在全局名称空间中,尽pipe它的原名是logging在函数types本身中的。