在javascript中,你想什么时候使用它:
(function(){
//Bunch of code...
})();
Run Code Online (Sandbox Code Playgroud)
对此:
//Bunch of code...
Run Code Online (Sandbox Code Playgroud) 在javascript中,有创建匿名函数并立即调用它的常见模式(通常这称为自执行匿名函数或立即调用的函数表达式).
使用Java 8 lambdas,有没有一种标准的方法来复制这种行为?有点像(() -> doSomething())().
这个问题基本上问了同样的问题,但对于Java 7.我明确地寻找使用lambdas的构造.
var module = {};
(function(exports){
exports.notGlobalFunction = function() {
console.log('I am not global');
};
}(module));
function notGlobalFunction() {
console.log('I am global');
}
notGlobalFunction(); //outputs "I am global"
module.notGlobalFunction(); //outputs "I am not global"
Run Code Online (Sandbox Code Playgroud)
谁能帮我理解这里发生了什么?如果你打电话notGlobalFunction(),我会得到它,它只会调用第二个函数.
但是在var module = {}做什么?为什么在第一个函数内再次调用?
它说这通常被称为自动执行的匿名函数,但我不知道这意味着什么.
我正在尝试在NodeJS中的自执行函数中分配构造函数.我很确定它不起作用,因为我的参数是一个指向module.exports的变量,但我很好奇是否有办法使其工作,同时保持尽可能接近自执行格式.
这是代码被调用的方式......
var TemplateEngine = require('./templateEngine');
templateEngine = new TemplateEngine({engine: 'swig'}); // "object is not a function"
Run Code Online (Sandbox Code Playgroud)
这是一个很好的代码示例...
var assert = require('assert');
var swig = require('swig');
// Constructor
var TemplateEngine = function(args) {
assert.ok(args.engine, 'engine is required');
var templateEngine = {};
templateEngine.engine = args.engine;
templateEngine.Render = function(templateString, model) {
var result = swig.render(templateString, model);
return result;
};
return templateEngine;
};
module.exports = TemplateEngine;
Run Code Online (Sandbox Code Playgroud)
这里是我想要使用的代码样式的一个例子,但它产生了一个"TypeError:Object is not function"错误,因为我实际上并没有分配给module.exports,只是一个复制它所指向的任何变量的变量至.
(function(templateEngine) {
var assert = require('assert');
var swig = require('swig');
templateEngine = function(args) …Run Code Online (Sandbox Code Playgroud) 我正在查看underscore.js库的代码(jQuery做同样的事情)并且只想澄清为什么窗口对象被传递到自执行函数.
例如:
(function() { //Line 6
var root = this; //Line 12
//Bunch of code
}).call(this); //Very Bottom
Run Code Online (Sandbox Code Playgroud)
既然this是全局的,为什么它被传递到函数中?以下工作也不会这样吗?这样做会产生什么问题?
(function() {
var root = this;
//Bunch of code
}).call();
Run Code Online (Sandbox Code Playgroud) 在窗口过程之外,我正在switch使用自执行 lambda编写语句,如下所示:
LRESULT 回调过程(HWND hWnd、UINT msg、WPARAM wp、LPARAM lp)
{
开关(味精)
{
case WM_CREATE: return [&](WPARAM wp, LPARAM lp) {
do_something(wp, lp);
返回0;
}(wp, lp);
case WM_SIZE: return [&](HWND hWnd) {
do_another_thing(hWnd);
返回0;
}(hWnd);
}
返回 DefWindowProc(hWnd, msg, wp, lp);
}
我相信编译器可以按照他们想要的方式自由地优化它,但一般来说,与不使用这些 lambdas 相比,编译器会为此添加很多样板代码吗?
编译器能否检测到多余的 lambdas 并删除它们?
我正在尝试使用自调用函数,以便每个函数都objects将返回不同的消息.
<script type="text/javascript">
objects = {};
for( var i = 0; i < 10; i++ ) {
objects['function'+i] = function () {
var text = ( function() { return "I am object " + i; } )();
return text;
};
}
for( var j = 0; j < 10; j++ ) {
document.write( objects['function'+j]() + "<br>" );
}
</script>
Run Code Online (Sandbox Code Playgroud)
到目前为止,上述结果如下:
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
如何使用自调用函数立即设置消息而不是与不稳定的事情联系在一起i?
CodeMirror.net使用这个构造(我稍微简化)来为它的JavaScript编辑器引入代码:
(function(mod) {
this.CodeMirror = mod();
})(function() {
"use strict";
(15,000-odd lines of advanced JS)
}
Run Code Online (Sandbox Code Playgroud)
现在,我知道这是一个自动执行的功能,我已经阅读了很多关于它们的帖子.据我所知,实际上,这段代码正在创建一个CodeMirror对象.我只是不懂机制.
谢谢你的帮助.
我希望能够修改传递给自执行函数的参数.
以下是一些示例代码:
var test = 'start';
(function (t) {t = 'end'} )(test);
alert(test) //alerts 'test'
Run Code Online (Sandbox Code Playgroud)
而这里是一个小提琴.变量test没有改变.我怎样才能改变它,就像传递参考一样?
javascript anonymous-function pass-by-reference self-executing-function
在JavaScript中,可以编写一个这样的自执行函数:
(function foo() {
console.log("bar");
}());
Run Code Online (Sandbox Code Playgroud)
我希望用Java做到这一点.例如:
// This code does not work obviously
public static void main(String[] args) {
(foo() {
System.out.println("bar");
}());
}
Run Code Online (Sandbox Code Playgroud)
有这样的事吗?
javascript ×7
java ×2
lambda ×2
c++ ×1
c++11 ×1
closures ×1
codemirror ×1
constructor ×1
function ×1
iife ×1
java-7 ×1
java-8 ×1
jquery ×1
node.js ×1