相关疑难解决方法(0)

用于自动执行匿名JavaScript函数的括号的位置?

我最近将当前版本的json2.js与我在项目中的版本进行了比较,并注意到函数表达式的创建和自我执行方式有所不同.

用于在括号中包装匿名函数然后执行它的代码,

(function () {
  // code here
})();
Run Code Online (Sandbox Code Playgroud)

但现在它将自动执行的函数包含在括号中.

(function () {
  // code here
}());
Run Code Online (Sandbox Code Playgroud)

有通过CMS在接受答案的注释解释JavaScript的封装匿名函数的语法是"既:(function(){})();(function(){}());有效."

我想知道有什么区别?前者是否通过绕过全局匿名函数来占用内存?括号应该放在哪里?

javascript syntax anonymous-function iife

105
推荐指数
3
解决办法
1万
查看次数

javascript中的init函数及其工作原理

我经常看到以下代码:

(function () {
  // init part
})();
Run Code Online (Sandbox Code Playgroud)

但我永远无法理解它是如何运作的.我发现最后一个括号特别令人困惑.有人可以解释它在执行上下文(EC)和变量对象(VO)方面的工作原理吗?

javascript

55
推荐指数
5
解决办法
11万
查看次数

"(function(){})()"和"(function(){}())"在JavaScript中功能相同吗?

均低于警戒这些代码块foo,然后bar.唯一的区别是})()}()).

代码1:

(function()
{
    bar = 'bar';
    alert('foo');
})();

alert(bar);
Run Code Online (Sandbox Code Playgroud)

代码2:

(function()
{
    bar = 'bar';
    alert('foo');
}());

alert(bar);
Run Code Online (Sandbox Code Playgroud)

除了语法之外,还有什么区别吗?

javascript function

55
推荐指数
3
解决办法
5901
查看次数

为什么Closure Compiler不识别自执行匿名函数中的类型声明?

"Unknown type"通过Closure Compiler运行一个相当大的库时,我收到了很多警告,当我的类型在自动执行的匿名函数中声明时,它们似乎就出现了.这没有什么奇特之处,但是如果我将自执行函数剥离出来,类型声明似乎起作用(至少在这个简单的测试中).

我不确定我的代码注释是否有问题,或者代码中是否存在任何违法行为,但我认为这都是犹太教和模块化API的标准方法.

以下测试代码创建一个命名空间(只是一个普通的旧JS对象)并附加一个枚举(一个对象文字)和一个函数.

var mynamespace = {};
(function (mynamespace) {
    /**
     * Some enum.
     * @enum {number}
     */
    mynamespace.SomeEnum = {
        FOO: 1,
        BAR: 2
    };

    /**
     * Frazzle some type.
     * @param {mynamespace.SomeEnum} qux The type to frazzle.
     * @return {boolean} whether the operation succeeded.
     */
    mynamespace.frazzle = function(qux) {
        return true;
    }
}(mynamespace));

// call it
mynamespace.frazzle(mynamespace.SomeEnum.FOO);
Run Code Online (Sandbox Code Playgroud)

看起来很好,对吗?闭包编译错误:

[jscomp] Compiling 1 file(s) with 37 extern(s)
[jscomp] X:\dev\solclientjs\sdk\tools\jscomptest.js:14: WARNING - Parse error. Unknown type mynamespace.SomeEnum

[jscomp] …
Run Code Online (Sandbox Code Playgroud)

javascript design-patterns google-closure-compiler jsdoc

13
推荐指数
1
解决办法
2664
查看次数

这些自执行匿名函数(又名IIFE)实现之间有什么区别

在许多书籍/ 博客文章中,自调用匿名函数模式的方式如下:

(function() {
  var foo = 'bar';
})();
Run Code Online (Sandbox Code Playgroud)

但是,在此上运行JSLint会出现此错误:

将调用移动到包含该函数的parens中.

例如将其改为此作品:

(function() {
  var foo = 'bar';
}());
Run Code Online (Sandbox Code Playgroud)

问题

  1. 为什么第一个实现对JSLint来说不够好?有什么区别?
  2. 什么是首选形式?JSLint总是对的吗?
  3. 它为什么有效?毕竟function(){}()抛出一个SyntaxError: Unexpected token (
    但用parens包裹它会让它突然间起作用吗?eg (function(){}()) - 工作正常
    (毕竟这是JavaScript,而不是Lisp,所以包装parens对ohterwise语法错误的影响是什么?)

编辑:这是对此的一些后续(虽然我不会说完全重复):JSLint错误:"将调用移动到包含该函数的parens",所以我的主要问题是#3,为什么它完全有效?

javascript

9
推荐指数
1
解决办法
610
查看次数

这是什么?(function(){})()

可能重复:
此JavaScript代码段的含义是什么?
用于自动执行匿名JavaScript函数的括号的位置?

(function(){

    //something here...

})() <--//This part right here.
Run Code Online (Sandbox Code Playgroud)

究竟是什么)()
如果我改成它())怎么办?

(function(){

    //something here...

}()) <--//Like this
Run Code Online (Sandbox Code Playgroud)

javascript function

8
推荐指数
2
解决办法
1173
查看次数

内部括号与外部括号之间的区别

有人可以解释这些闭包之间的区别吗?有区别吗?我以前没见过第二个例子(里面的括号).

(function(a, b) {
    //...
})(x, y);

// Parentheses inside
(function(a, b) {
    //...
}(x, y));
Run Code Online (Sandbox Code Playgroud)

在这里,这些闭包之间有区别吗?是否有一个地方有一个场景出现差异?

FOO.Bar = (function() {
    //...
})();

FOO.Bar = (function() {
    //...
}());
Run Code Online (Sandbox Code Playgroud)

javascript closures

5
推荐指数
1
解决办法
948
查看次数

在立即函数中运行此代码有什么区别?

我在javascript文件中看到了很多这样的模式:

(function ($) 
{
   //Perform operation X
}(jQuery));
Run Code Online (Sandbox Code Playgroud)

将上述代码放在js文件中与以下内容之间是否有区别:

function myFunc($) 
{
   //Perform operation X
}
myFunc(jQuery);
Run Code Online (Sandbox Code Playgroud)

或者它更简洁?

javascript

3
推荐指数
1
解决办法
52
查看次数