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. JS高级---逆推继承看原型

    逆推继承看原型 function F1(age) { this.age = age; } function F2(age) { this.age = age; } F2.prototype = new ...

  2. IntelliJ IDEA 2017.3来自百度----idea原生快捷键

    常用 Ctrl+R  查找加替换 Ctrl+Alt+回车 从当前行,向上加一行 Shift+回车 从当前行,向下加下一行 Ctrl+Alt+L 格式化代码 Ctrl+/ // Ctrl+Shift+/ ...

  3. IntelliJ IDEA 2017.3尚硅谷-----鼠标悬浮提示

    建议不会的直接百度取消设置

  4. c# 技巧

    1 遍历属性 Type t = typeof(Colors); PropertyInfo[] pInfo = t.GetProperties(); foreach (PropertyInfo pi i ...

  5. jvm(1):内存结构

    JVM内存结构 JVM内存的运行时数据区: 线程私有(在线程启动时创建) 程序计数器Program Counter Register 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器, ...

  6. AcWing 104. 货仓选址

    #include <iostream> #include <algorithm> using namespace std; ; int n; int q[N]; int mai ...

  7. Linux服务器时间设置及同步

    闲余:夏日将到,园区计划五一期间进行大面积的电网停电检修,运维同学因此将公司测试服务器提前关闭了.收假后,测试告诉我,他发现一个bug--一段定时任务程序未执行,我的第一反应就是--会不会是假期测试服 ...

  8. mysql yum 卸载取消开机自启动

    查询安装的yum源rpm -qa | grep -i mysql 使用yum remove卸载 yum remove 刚才过滤出来的包一个个来 剩下卸载不了使用 rpm -e --nodeps: rp ...

  9. (DFS)HDU_1241 Oil Deposits

    HDU_1241 Oil Deposits   Problem Description The GeoSurvComp geologic survey company is responsible f ...

  10. 「题解」「JZOJ-4238」纪念碑

    题目 在 \(N\times M\) 的网格中,有 \(P\) 个矩形建筑,求一个最大边长的正方形,使得网格中能找到一个放置正方形的地方,不会与建筑重合. 保证 \(N,M\le 10^6,P\le ...