js函数声明外面使用小括号括起来再接一个小括号的写法

(function(){})();
(function(){}());
!function(){}();

总结ps:意思将函数声明变成,直接执行的函数表达式.

上面三个语句都是在运算符相关上下文中,所以都是表达式,就可以强制调用了,下面做一下分析:

(function(){})(),
(function(){})是一个表达式,会强制其理解成函数直接量方式,也就是表达式方式创建函数,
(function(){})它会返回函数对象的引用,最后使用小括号()调用此函数。

(function(){}()),
如果不用外面包裹的小括号,{}就会理解为复合语句,
那么function(){}就被理解为函数声明,但是没有标识符,所以会报错,
使用小括号以后,就会变成表达式,也会被理解为直接量方式。
!function(){}(),
原理同上,!也是一个运算符,所以在原理同上。
 
 

js函数声明外面使用小括号括起来再接一个小括号的写法的更多相关文章

  1. js函数声明和函数表达式的区别

    Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...

  2. js 函数声明和函数表达式

    在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省 ...

  3. JS函数声明与定义,作用域,函数声明与表达式的区别

    Scoping & Hoisting 例: var a = 1; function foo() { if (!a) { var a = 2; } alert(a); }; foo(); 上面这 ...

  4. 转载 js函数声明和函数表达式

    在js中函数有两种表达方式.1 函数声明 2 函数表达式 函数声明 function sayname(){ alert("li lei"); } 函数表达式 var sayname ...

  5. js函数声明提升与变量提升

    变量提升 变量提升: 在指定作用域里,从代码顺序上看是变量先使用后声明,但运行时变量的 “可访问性” 提升到当前作用域的顶部,其值为 undefined ,没有 “可用性”. alert(a); // ...

  6. js函数声明

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  7. js 函数声明与函数表达式

      1,变量包括全局变量和局部变量,局部变量只能在函数内部访问.如果函数传参和全局变量一样的话,即使是给全局变量赋值,这里会把全局变量当成局部变量的. 如: 1: var x='x'; 2:   3: ...

  8. js 函数声明和函数表达式的区别

    javascript中声明函数的方法有两种:函数声明和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函数 ...

  9. 有趣 GIF 动图集 - 仿佛每张小动图都诉说了一个小笑话或者小故事

    点这里 来自法国南特(Nantes)的 Guillaume Kurkdjian 目前还是个学生.Kurkdjian 擅长创作一些平面动态图像,这些有趣的小动图仿佛每张都诉说了一个小笑话或者小故事,像个 ...

随机推荐

  1. (转)HDFS简介

    转自:http://os.51cto.com/art/201212/369564.html

  2. jquery easyui combogrid Uncaught TypeError:Cannot read property

    ================================ ©Copyright 蕃薯耀 2020-01-07 https://www.cnblogs.com/fanshuyao/ 一.问题描述 ...

  3. 阿里巴巴手册之-Arrays.asList()数组转集合的问题

    转载来源:https://blog.csdn.net/qq_36443497/article/details/79663663?utm_source=blogxgwz9 在使用工具类Arrays.as ...

  4. input如何上传文件

    1)绑定input[type='file']的change事件 <input @change="uploadPhoto($event)" type="file&qu ...

  5. C++-POJ1067-取石子游戏

    //(ak,bk)=([k*(1+sqrt(5))/2],[k*(1+sqrt(5))/2]+k)=(ak,ak+k) #include <cstdio> double sqrt5=2.2 ...

  6. IDEAVIM 常用快捷键总结和使用说明

    ---title: ideavim常用快捷键总结和使用tags: grammar_cjkRuby: true--- #### `待办` ideavim用于编程的常用快捷键说明 常用快捷键 插入(光标前 ...

  7. 阻塞队列BlockingQueue之ASynchronousQueue

    一.SynchronousQueue简介 Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除 ...

  8. Lose it!

    You are given an array aa consisting of nn integers. Each aiai is one of the six following numbers:  ...

  9. 一些 NuGet 程序包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装

    如果 NuGet 检测到包受到重定向或升级项目的影响,它会将 packages.config 中的 requireReinstallation="true" 属性添加到所有受影响的 ...

  10. IIS 无法读取配置节"system.web.extensions",因为它缺少节声明

    IIS 无法读取配置节"system.web.extensions",因为它缺少节声明 先安装ASP.NET 4.0  然后: 今天在本地安装iis,搭建网站,应用程序的时候报错下 ...