javaScript中函数调用的疑问,末尾多了一个()

    var Singleton=function(){
       var privateVariable=10;
       function privateFunction(){
             return false;
       }
       return {
             publicProperty:true,
             publicMethod:function(){
                  privateVariable++;
                  return privateFunction();
             }
       }
    }();

这段代码中,末尾出现了();如果没有这个(),那么我可以这么调用:
//调用函数
var s=Singleton();

疑问:现在末端多加了个()如何理解呢??高程上只是说了,函数表达式的后面可以跟圆括号。
阅读 2.4k
4 个回答
  1. 函数名只是个变量而已,实际上你可以把函数看成是一种“数据类型”。那么函数就存在“函数字面量”这一说法

  2. 函数的执行是函数末尾跟括号的方式

  3. 函数名后面跟括号可以执行,那为何不直接字面量后面跟个括号,反正都是函数后面跟个括号,一样满足函数执行的语法

立即执行函数,

Singleton = {
             publicProperty:true,
             publicMethod:function(){
                  privateVariable++;
                  return privateFunction();
             }
       }

这是闭包的用法

函数调用的结果是返回值,中间的计算什么的只能算是过程。
那么初始加了圆括号的函数,执行结果就是:

return {
             publicProperty:true,
             publicMethod:function(){
                  privateVariable++;
                  return privateFunction();
             }

那么也就是相当于

var Singleton = {
             publicProperty:true,
             publicMethod:function(){
                  privateVariable++;
                  return privateFunction();
             }

首先得感谢各位,其实我最想问咋调这个函数呢,看了大家的留言后,就比划了一下:(看末尾的函数调用,居然可以了)

var Singleton=function(){
       var privateVariable=10;
       function privateFunction(){
             return false;
       }
       // alert(9);
       return {
             publicProperty:true,
             publicMethod:function(){
                  privateVariable++;
                  alert(privateFunction());
             }
       }
    }().publicMethod();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题