文章出自个人博客https://knightyun.github.io/2018/05/23/js-anonymous-function,转载请申明。


Javascript代码中,语句和函数以及匿名函数的执行存在一些区别,所以在编写过程中也存在一些“坑“。

script 中的语句

html文档中的javascript语句是写在 <script></script> 中的,每条语句末尾需要添加分号 ;,表示此条语句执行结束。例如下面的代码:

<script>var x = 9;alert(x);
</script>

文档加载到这块代码区域时,就会立刻执行这两条语句,即弹出提示框为x的值,但是如果把语句换成函数定义,代码如下:

<script>var x = 9;function fx(){alert(x);}fx();
</script>

这时第一行语句会被执行,第二至五行是函数定义,并不会执行这个函数,直到最后一行语句才会真正执行这个定义过的函数。

如果需要立刻执行函数的话,就需要使用匿名函数了。所谓匿名函数,顾名思义,即不会给这个执行的函数定义“函数名”,而且是一个立即执行的语句。格式如下:

<script>var x = 9;(function(){alert(x);})();
</script>

注意代码中的三个括号的位置,以及最后跟的那个分号,表示这是一个立即执行的语句。

当然匿名函数也能传递参数,例如:

<script>(function(var x){alert(x);})(9);
</script>

效果和上面一样。

但有时又需要不立即执行的函数,例如:

<script>setTimeout(function(){var x = 9;alert(x);}, 2000);
</script>

效果与下面代码一样:

<script>var x = 9;setTimeout("alert(x)", 2000);
</script>

这是Javascript中的延时函数,表示2秒后弹出提示。setTimeout() 自身就是一个函数,里面的 “alert(x)” 是这个函数的一个参数,即一个加引号的语句。便于理解,可以写成这样:

setTimeout("alert();", 2000);

这样写并不会出错。

所以这个函数 setTimeout() 的参数是一个不用立即执行的匿名函数 function(){},也可以是一个语句块,从而进行参数传递

通俗讲,这里加引号的语句块相当于不加引号的匿名函数。

标签属性中的语句

在 html 标签中也能使用语句,通常用于设置元素的属性。

先对比区分以下代码:

<script>function fx(){alert();}
</script><button onclick="alert()">Button1</button><button onclick="fx()">Button2</button><button onclick=fx()>Button3</button><button onclick=(function(){alert();})()>Button4</button><button onclick="(function(){alert();})()">Button5</button><button onclick=function(){alert();}>Button6</button><button onclick="function(){alert();}">Button7</button>

猜一下哪个按钮点击无效……

答案是最后的“Button6”“Button7”,然后就能发现规律了,属性所设置的必须是能立即执行语句块函数匿名函数,最后那两种情况是行不通的。


技术文章推送 手机、电脑实用软件分享

JavaScript中语句与函数的执行辨析相关推荐

  1. 深入认识javascript中的eval函数

    来源:http://wanyij.blog.51cto.com/46570/43794 发现为本文起一个合适的标题还不是那么容易,呵呵,所以在此先说明下本文的两个目的: (1)介绍javascript ...

  2. 如何找到JavaScript中的调用者函数?

    function main() {Hello(); }function Hello() {// How do you find out the caller function is 'main'? } ...

  3. jQuery中的read 和JavaScript中 的onload函数的区别

    2019独角兽企业重金招聘Python工程师标准>>> 在JavaScript中,onload函数是最经常用到的,这个函数的作用是等待网页完全加载之后再去执行代码块中的语句,因为按照 ...

  4. JavaScript中的工厂函数vs构造函数vs class

    原文链接:JavaScript Factory Functions vs Constructor Functions vs Classes 作者:Eric Elliott 译者:sunny 转载需提前 ...

  5. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  6. 在javascript中使用纯函数处理副作用

    在javascript中使用纯函数处理副作用 今天给大家带来一片译文, 详情请点击这里.可能在墙内哦 开始了, 如果你点开这篇文章, 就证明你已经开始涉及函数式编程了, 这距离你知道纯函数的概念不会很 ...

  7. 理解javascript中的回调函数(callback)

    理解javascript中的回调函数(callback) 在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Obje ...

  8. javaScript中的匿名函数

    js中的匿名函数 js匿名函数 js中匿名函数的N种写法 直接上代码和截图 <!DOCTYPE html> <html> <head> <meta chars ...

  9. 关于javascript中的回调函数

    关于javascript中的回调函数 原文地址:http://blog.csdn.net/sicluoyi/article/details/1737969 考虑一个这样的例子: 假如某个项目的底层和高 ...

最新文章

  1. Vmware linux 无法上网
  2. 第二十天:规划风险应对
  3. 【.NET程序性能分析】使用VS自带的工具分析.NET程序的性能
  4. 从新手机到老股票 闲鱼为何会沦为骗子与营销的新平台?
  5. 信息技术与计算机文化的问题,信息技术与计算机文化
  6. Python- 解决PIP下载安装速度慢
  7. jQuery 和 YUI (Yahoo User Interface) 各自的优缺点有哪些?具体的使用场景是怎样的?...
  8. 计算机网络自考顺序,自考计算机网络课程复习顺序是怎样?有没有好用的计算机网络自考APP?...
  9. 读写锁优先级的问题解决了
  10. html css 简历底纹,有了这些CSS套路,你也可以做一个漂亮的简历
  11. 分配甲、乙、丙、丁四人去完成五项任务,每人完成各项任务的时间如下表所示
  12. 邮箱被国际反垃圾邮件组织拉黑的解决方法
  13. C++ OpenCV相机标定---实心圆点、棋盘格
  14. PDF,图片转word
  15. 项目经理进阶:如何做好一个领导者
  16. 对 kubeadm 进行故障排查
  17. ubuntu黑屏有声音
  18. C陷阱篇之char的默认符号
  19. 【批量识别图片内容改名】如何批量识别图片中的文字并自动改名,如何根据图片上的文字内容重命名图片,批量的识别区域内容如何重命名改名,全部告诉你
  20. 【数据存储】signed,unsigned到底怎么区分?如何计算?

热门文章

  1. 《Beginning Linux Programming》读书笔记(四)
  2. 转jmeter 性能测试 JDBC Request (查询数据库获取数据库数据) 的使用
  3. 日本的“电力路由器”概述
  4. SAP MM ME51N 创建采购申请单据时候永远取物料主数据基本计量单位
  5. start mysql server_mysql5我的难点,快捷操作(mysql.server stop start),开机启动
  6. opencv ellipse函数_13、OpenCV绘图和文本显示
  7. HDU 3662 3D Convex Hull(三维凸包面的个数)
  8. canvas 实现雷达图
  9. 是时候了解React Native了
  10. Linux性能分析之网络篇