相关疑难解决方法(0)

JavaScript中的函数表达式与声明有什么区别?

以下代码行之间有什么区别?

//Function declaration
function foo() { return 5; }

//Anonymous function expression
var foo = function() { return 5; }

//Named function expression
var foo = function foo() { return 5; }
Run Code Online (Sandbox Code Playgroud)
  • 什么是命名/匿名函数表达式?
  • 什么是声明的功能?
  • 浏览器如何以不同方式处理这些结构?

对类似问题(var functionName = function(){} vs function functionName(){})的响应是不是完全正确?

javascript

469
推荐指数
4
解决办法
15万
查看次数

为什么需要在同一行上调用匿名函数?

我正在阅读一些关于闭包的帖子,到处都看到了这个,但是没有明确的解释它是如何工作的 - 每次我被告知要使用它......:

// Create a new anonymous function, to use as a wrapper
(function(){
    // The variable that would, normally, be global
    var msg = "Thanks for visiting!";

    // Binding a new function to a global object
    window.onunload = function(){
        // Which uses the 'hidden' variable
        alert( msg );
    };
// Close off the anonymous function and execute it
})();
Run Code Online (Sandbox Code Playgroud)

好的,我看到我们将创建新的匿名函数,然后执行它.所以在那之后这个简单的代码应该工作(并且确实如此):

(function (msg){alert(msg)})('SO');
Run Code Online (Sandbox Code Playgroud)

我的问题是这里发生了什么样的魔术?当我写作时我想:

(function (msg){alert(msg)})
Run Code Online (Sandbox Code Playgroud)

然后会创建一个新的未命名函数,如函数""(msg)...

但那么为什么这不起作用?

(function (msg){alert(msg)});
('SO');
Run Code Online (Sandbox Code Playgroud)

为什么它需要在同一行?

你能指点一些帖子或给我解释一下吗?

javascript anonymous-function iife

372
推荐指数
8
解决办法
29万
查看次数

解释封装的匿名函数语法

摘要

你能解释一下JavaScript中封装的匿名函数语法背后的原因吗?为什么这样做:(function(){})();但这不是:function(){}();


我知道的

在JavaScript中,可以创建一个这样的命名函数:

function twoPlusTwo(){
    alert(2 + 2);
}
twoPlusTwo();
Run Code Online (Sandbox Code Playgroud)

您还可以创建匿名函数并将其分配给变量:

var twoPlusTwo = function(){
    alert(2 + 2);
};
twoPlusTwo();
Run Code Online (Sandbox Code Playgroud)

您可以通过创建匿名函数来封装代码块,然后将其包装在括号中并立即执行:

(function(){
    alert(2 + 2);
})();
Run Code Online (Sandbox Code Playgroud)

这在创建模块化脚本时非常有用,可以避免使当前作用域或全局作用域混乱,并且可能存在冲突的变量 - 例如Greasemonkey脚本,jQuery插件等.

现在,我理解为什么会这样.括号包含内容并仅公开结果(我确定有更好的方法来描述),例如with (2 + 2) === 4.


我不明白

但我不明白为什么这也不起作用:

function(){
    alert(2 + 2);
}();
Run Code Online (Sandbox Code Playgroud)

你能解释一下吗?

javascript syntax anonymous-function

364
推荐指数
4
解决办法
7万
查看次数

标签 统计

javascript ×3

anonymous-function ×2

iife ×1

syntax ×1