这段代码中的“()”是什么意思[闭包]

时间:2014-02-24 11:14:55

标签: javascript jquery html5 closures

$(document).ready(function(){
    var dash = function(){
            return{
             bindEvents: function(){
             }
            };      
    }();
window.methods = dash;
methods.bindEvents();
 });

如果没有“()”,上述代码无效。请解释为什么我们需要使用????

以及

         return{
         bindEvents: function(){
                               }
         };

工作正常。但如果我在返回语句下面对齐大括号。它会引发错误

          return
            {                  // throws an error
         bindEvents: function(){
                               }
             };

请解释。

2 个答案:

答案 0 :(得分:2)

让我们看看你在问题中提到的要点:

$(document).ready(function(){
   var dash = function(){
        return{
           bindEvents: function(){}
        };      
   }();
   window.methods = dash;
   methods.bindEvents();
});

1 - 上述代码在没有“()”的情况下无效。请解释为什么我们需要使用????

因为这是(IIFE - 立即调用的函数表达式)的语法,这意味着它是一个表达式,一旦文档加载就自己执行,想想jQuery库,它是开发的方式。

return
      {   // throws an error
        bindEvents: function(){}
      };

2 - 但如果我在return语句下方对齐大括号。它会抛出错误

是的,编译器会警告语法错误,因为如果你将大括号向下移动到该行,那么当你使用浏览器查看你的页面或你的函数然后它做了什么时,它会自动添加一个{{ 1}}所以它变成;

所以输出类似于:

return;

下面有一个return; { // throws an error bindEvents: function(){} }; ,它不会从它返回,因此会导致问题。

答案 1 :(得分:0)

它会立即执行你在那里定义的功能

function() {
 return{
  bindEvents: function(){}
  };      
}

没有它dash将指向您定义的函数,dash将包含此案例对象中函数执行的结果:

{
  bindEvents: function(){}
}