JS 计时器参数剖析与真题

HTML5学堂-码匠:计时器的第一个参数,包含几种不同的书写方法,可以是函数名,匿名函数,JS代码字符串,还有一些面试题当中会出现“函数调用”的书写方式。

那么,这些不同的书写方法分别表示什么呢?在计时器中出现的第一个参数,作用域又是在哪里创建的?

计时器第一个参数的不同写法

函数名的书写方法

这是最为常见的一种书写方法,该方法表示的是,在固定毫秒之后,将这个函数名的函数添加到执行队列当中,让其执行。

字符串式的书写方法

当一个函数有参数时,很多人会采用这样的调用方法。

Tips:参数为文字时,可以用单引号内包双引,或双引号内包单引的方式书写。

setTimeout 和 setInterval 都可以接受字符串(作为第一个参数),但是并不推荐使用这种书写方法。原因在于:为了能够运行,会在代码执行时,将字符串通过eval方法进行转换。

eval方法,其作用就是把字符串当做JS去执行。eval虽然能够解决很多问题,有很大的作用,但是也广为诟病,其性能问题,安全性问题,以及在JS严格模式与非严格模式的不同。

由于这些缺点,使得众多开发者在项目和代码中,尽量规避了对它的使用。

匿名函数的书写方法

当函数有参数要传递,而又不能使用字符串式的书写方法,此时,匿名函数的书写方法就派上了用场。

函数调用的书写方法

这种书写方法,本身是错误的,几乎在实际开发当中是无法找到的。当然在偶尔会在面试当中以“坑”的形式出现……

此处第一个函数会在执行到计时器这行代码时,立即执行,而返回的是h5course函数的返回值,而非函数本身。如果函数返回默认返回值undefined,setInterval也不会报错。

第一个参数的作用域归属

计时器的第一个参数,默认在全局作用域中执行,因此函数内的 this 将会指向window。

Tips:运行结果为true

Tips:运行结果为true

来几道面试真题练练手

如下代码打印结果是什么

Tips:答案请见文章底部

码匠 两个字多久会打印出来

Tips:答案请见文章底部

请说出如下代码运行情况

Tips:答案请见文章底部

总而言之,言而总之

当要执行的函数没有参数时,可以直接使用函数名调用

当需要向回调函数中传递参数时,不要使用字符串做参数,使用匿名函数做参数,并在匿名函数内部执行回调函数。

第一参数的函数会在全局作用域中进行执行

三道面试真题的答案

第一题:先输出10,之后大概1秒后,同时输出10个10。

第二题:约1000毫秒(即约1秒)

第三题:在函数执行时,两个li的背景颜色立即被设置为了红色,经过大概5000毫秒之后,控制台报错(两个错误),错误内容均为“red is not defined”

开开心心每一天

生活艰辛,代码不易,但,不要忘记微笑!

版权声明:该图来自“【美】莉兹·克里莫 (author)”的书籍《你今天真好看》

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2017-09-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏灯塔大数据

技术 | Python从零开始系列连载(六)

导读 为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载 上一期学习了Python程序的基本控制流程,相信大家...

3247
来自专栏Coco的专栏

神秘的 shadow-dom 浅析

1424
来自专栏web编程技术分享

第五节 关于浮动和清除浮动的解说,以及两个大坑不要踩

3207
来自专栏用户2442861的专栏

#define和typedef的用法与区别及面试问题

在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:

231
来自专栏用户2442861的专栏

python的str,unicode对象的encode和decode方法

python的str,unicode对象的encode和decode方法  python中的str对象其实就是"8-bit string" ,字节字符串,本质...

241
来自专栏FreeBuf

Android污点分析工具flowdroid源码简析

flowdroid是一款对Android app进行风险分析的应用,下面深入其源码对其工作的流程进行相关的探究。 1、准备 a)下载相关源码(包括soot、he...

5015
来自专栏编程

自学Python笔记(二)

作为最最基础的初学者,尤其是面对中小学生学习Python我想大概了解一下Python,能编个小程序,能看懂一般的程序就可以,如果想深一步的学习还是需要静下心来好...

1607
来自专栏进击的君君的前端之路

ReactJS简介

1063
来自专栏TungHsu

这或许是对小白最友好的python入门了吧——18,定义函数

有的时候我们写的代码往往是一个功能组合,并且这组代码可能会很复杂,但是我们在写代码的时候可能会多次用到这组代码,每次都写这么多代码浪费时间并且检查、修改起来也很...

3247
来自专栏程序员互动联盟

聊聊C语言-编程世界的容器

上一篇聊聊C语言-存储世界的奥秘,我们介绍了计算机的整个存储体系设计,了解了我们的数据在计算机中是怎么被存储的。然而在我们的编程中我们的代码也是按照这个结构被计...

3327

扫描关注云+社区