有什么区别 – 第一: – (function () { var Book = 'hello'; }()); 第二:- (function () { var Book = 'hello'; })(); 第一和第二个类似的工作.. 第三: (function ($) { var Book = 'hello'; })(jQuery); 什么样的模式,我需要使用和在我的编码..第三模块模式,我看到,当我正在阅读一篇文章相关的backboneJS。 我从第三个“自动执行函数的参数”jQuery“”了解… …. 任何请给我一些关于立即调用函数expression式(IIFE)的想法。 谢谢 !!
可能重复: 感叹号在函数之前做了什么? 我很久以前在JavaScript中使用以下自执行匿名函数: (function () { /* magic happens */ })() 最近,我开始看到以下模式的更多实例(例如,在Bootstrap中 ): !function () { /* presumably the same magic happens */ }() 任何人都知道第二种模式的优点是什么? 或者,这只是一种文体偏好?
我正在学习THREE.js并注意到一个模式,其中的function定义如下: var foo = ( function () { var bar = new Bar(); return function ( ) { //actual logic using bar from above. //return result; }; }()); (例子见这里的 raycast方法)。 这种方法的正常变化看起来像这样: var foo = function () { var bar = new Bar(); //actual logic. //return result; }; 比较第一个版本和正常的版本,第一个版本似乎有所不同: 它分配自执行function的结果。 它在这个函数中定义了一个局部variables。 它返回包含使用局部variables的逻辑的实际函数。 所以主要区别在于,在第一个变体中,在初始化时,条只被分配一次,而第二个变体在每次被调用时创build这个临时variables。 我最好的猜测是为什么使用它,它限制了实例的数量(只有一个),从而节省了内存pipe理开销。 我的问题: 这个假设是否正确? […]
这两者有什么区别: $(function () { // do stuff }); 和 (function () { // do stuff })();
可能重复: JavaScript中的这个构造是什么? 我碰到这一点的Javascript代码,但不知道该怎么做。 为什么我运行这个代码时会得到“1”? (1)这个奇怪的小附录是什么,为什么这个函数是用括号括起来的? (function(x){ delete x; return x; })(1); 谢谢 :-)
JavaScript中两个模块的声明有什么区别? 一个在function上有括号,另一个没有? 一篇文章说 注意()周围的匿名函数。 这是语言所要求的,因为以token函数开头的语句总是被认为是函数声明。 包括()将创build一个函数expression式。 两者似乎都做同样的事情时,检查。 var person = (function () { // Private var name = "Robert"; return { getName: function() { return name; }, setName: function(newName) { name = newName; } }; }()); var person = function () { // Private var name = "Robert"; return { getName: function() { return name; […]
在审查Twitter Bootstrap Javascript中编写的一些代码时,看起来他们正在调用匿名函数,如下所示: !function( $ ) { … }(window.jQuery || window.ender); 传统上,我曾经这样做过这样的事情: (function($) { … })(window.jQuery || window.ender); 第一种方式似乎有些不好意思,我不确定这样做有什么好处或理由,而不是第二种方式呢? 请注意,我明白它是如何工作的,我正在理解为什么他们select这种方式来做到这一点。
下面我们有一个IIFE (像任何函数一样)创build一个局部范围。 在该范围内有一个parseInt函数。 现在,由于浏览器中已经有这个名字的全局函数,所以本地函数会遮盖全局的parseInt函数 – 在IIFE中,任何对parseInt调用都会调用本地函数,而不是全局函数。 (全局函数仍然可以通过window.parseInt引用) parseInt('123', 10); // the browser function is called (function() { function parseInt() { return 'overshadowed'; } parseInt('123', 10); // the local function is called })(); parseInt('123', 10); // the browser function is called 有没有一个法律 (ECMAScript规范)或事实上 (共同)的名字? 掩盖? 超载?
实际上,有一个JSLint选项是“好的部分”之一,“要求”立即调用周围的东西“,这意味着build筑 (function () { // … })(); 而是需要写成 (function () { // … }()); 我的问题是这个 – 任何人都可以解释为什么这第二种forms可能会被认为更好? 它更有弹性吗? 不太容易出错? 第一种forms有什么优势? 既然问了这个问题,我就明白了在function价值和function价值之间有清晰的视觉区分的重要性。 考虑立即调用的结果是赋值expression式的右侧的情况: var someVar = (function () { // … }()); 虽然最外面的括号在语法上是不必要的,但左括号给出了一个预先指示,即被赋值的值不是函数本身,而是被调用的函数的结果。 这与Crockford有关构造函数大写的build议类似 – 它意味着作为任何查看源代码的人的视觉提示。
我一直在寻找关于自我调用函数的信息,还有一个地方我偶然发现了这个符号: +function(){} 有人可以向我解释function前面的+符号是什么意思吗?