1. 前言

函数需要先定义,后使用。 这基本上所有编程语言的一条铁的定律。

一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用。 看一个例子

<!--by oscar999 2013-1-16-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Say Hello</title>
</head>
<body>
<script>//define functionfunction sayHello(){alert("hello");}//call functionsayHello();
</script>
</body>
</html>

但是如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢?

2. 思考的历程

从以上的例子来看,聪明的你结合以上的使用状况可能会想:

===》既然调用的时候是在函数名后面加上一对 是否在function 定义的后面加上一对大括号是否就可以执行了呢? 像以下这样:
    function sayHello(){alert("hello");}();

不幸的是,以上的写法会报出js 的语法错误。

因为Javascript 的解析器在解析器解析全局的function或者function内部function关键字的时候, 默认会把大括号解析成function声明,而不是function表达式。
也就是说, 会把最后的一对大括号默认解析成一个缺少名字的function,并且抛出一个语法错误信息,因为function声明需要一个名字。

===》 你可能又会想, 如果我在大括号中传入参数是否就会解析成表达式了呢?

  function sayHello(){alert("hello");}(1);

的确, 错误是没有了。 但是以上的写法等同于以下写法的效果

   function sayHello(){alert("hello");};(1);

这两句完全没有关系, 函数还是不会执行

3. 正确的写法

对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明

所以, 只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了。

    (function sayHello(){alert("hello");}());

还有一种写法也可以, 就是将后面的大括号移出来, as

  (function sayHello(){alert("hello");})();

推荐是使用第一种方式。

但是目前很多比较好的js library 使用的都是第二种方式。

比如: web 图形绘制的: git , draw2d ,....

4. 参考


1.  http://benalman.com/news/2010/11/immediately-invoked-function-expression/

JS 立即执行的函数表达式(function)写法相关推荐

  1. Javascript---Immediately-Invoked Function Expression (IIFE)立即执行的函数表达式

    1.一下是几种形式的函数调用: 各种调用的效率:在这编文章中有谈到: http://suqing.iteye.com/blog/1981591 // Either of the following t ...

  2. js立即调用的函数表达式

    1.多种实现 // 下面2个括弧()都会立即执行 (function () { /* code */ } ()); // 推荐使用这个 (function () { /* code */ })(); ...

  3. matlab 类写法,matlab中函数表达式的写法

    一条命令就可以了f=[1 1 5 3];多项式fvalue=polyval(f,6)%求多项式在x=6处的值www.mh456.com防采集. 用来查找a中小5261于0项的位置. y=symsum( ...

  4. 我去,JS自执行匿名函数竟然有20几种写法!

    为什么80%的码农都做不了架构师?>>>    发现一个新的自执行写法: { var x; x=1; alert(x);} //2013-01-30 14:45:57 //五大类,2 ...

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

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

  6. js调用php函数兵每秒刷新,深入理解JavaScript立即调用函数表达式(IIFE)

    立即调用函数 目录一.了解立即调用函数表达式 二.立即调用函数表达式报错了? 三.使用立即调用函数的正确姿势 四.常见使用场景 写在最后 一.了解立即调用函数表达式 1.1 思维导图 1.2 什么是立 ...

  7. 浅谈自执行函数-立即调用的函数表达式

    好文,屯一波:原文地址:https://www.jianshu.com/p/c64bfbcd34c3 在JavaScript中,会遇到自执行匿名函数:(function () {/*code*/} ) ...

  8. [Javascript 高级程序设计]学习心得记录10 js函数表达式

    在前面说对象的时候已经提到了函数对象,对函数的定义参数的传递包括通过argumentd.callee实现递归.这篇博客我会继续深入讲解js中的函数表达式. 一,闭包 关于闭包的概念,可以先看看http ...

  9. 立即调用函数表达式(立即执行函数)

    立即调用的匿名函又被称作是立即调用函数表达式(IIFE,Immemdiataely Inovked Function Expression);它类似函数声明,但由于被包含在括号中,所以会被解释为函数表 ...

最新文章

  1. Java关键字和保留字
  2. 附录1:python记事本
  3. java中的doget_java servlet中doGet()和doPost()方法的用法和区别
  4. Win2003的DHCP服务器无法提供服务怎么办?
  5. jenkins换服务器找不到包,服务器重启后Jenkins项目部分丢失问题解决方法
  6. Leetcode 数据结构与算法题解大全——目录(推荐收藏,持续更新)
  7. Python可以这样学(第四季:数据分析与科学计算可视化)-董付国-专题视频课程...
  8. 力扣98. 验证二叉搜索树(JavaScript)
  9. 模型人的因素_肺癌风险预测模型中纳入肺功能如何?
  10. UnitTest测试框架全栈详解
  11. python3.x的改进
  12. [转]VS2008 集成openCV过程
  13. 如何将电视机用作 Mac 的显示器?
  14. linux打包除了某个文件夹,tar打包且排除某个文件
  15. 国际C语言混乱代码大赛 获奖作品
  16. lj245a引脚功能图_JRC4558中文资料|引脚图及功能|应用电路图
  17. 2022 年 8 款最佳待办事项列表应用程序
  18. 电脑连接无线路由上不了网 连接手机热点却可以上网
  19. siggraph_SIGGRAPH的Unity
  20. 小木虫好中的ei期刊图像处理

热门文章

  1. 行内元素垂直方向位置调整的一些感悟和困惑
  2. 缓存LruCache简单创建和使用
  3. attribute property --- jquery attr() prop()
  4. 除了随机还要进化——对Infinity进一步的想法
  5. 【方案分享】2022线上云年会云会议玩法全案策划.pptx(附下载链接)
  6. 【报告分享】2019年大数据行业研究报告.pdf(附下载链接)
  7. linux下解压7z压缩包分卷
  8. PRML第十章 Approximate Inference(近似推断,变分推断,KL散度,平均场, Mean Field )
  9. 风口上的TikTok?
  10. java 五大原则_面向对象五大原则