相关疑难解决方法(0)

解释封装的匿名函数语法

摘要

你能解释一下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万
查看次数

我何时使用括号,何时不使用括号?

我怎么能说:

var myFunction = function() {
   setTimeout(myFunction, 1000);
}
myFunction();
Run Code Online (Sandbox Code Playgroud)

为什么函数调用setTimeout不需要括号,但最后一行呢?

javascript

10
推荐指数
3
解决办法
2270
查看次数

将select2限制为仅接受电子邮件地址

我有一个select2框,我是限制这个只接受电子邮件地址.

我试图通过编写自定义formatSelection函数来做到这一点

formatSelection: function(object, container){
        if(validateEmail(object.text)){
            return object.text;
        }
        else{
            return "";
        }
    }
Run Code Online (Sandbox Code Playgroud)

我期待返回一个空字符串就足以不显示此输入select2,但我得到一个空结果.

javascript jquery jquery-select2

2
推荐指数
1
解决办法
3693
查看次数