之前在学习的时候并没有发现的细节,关于js中,定时器的问题

这里我们写两个延时器

  setTimeout(func, 0);
  setTimeout("func()", 0);

定时器中,两个调用函数的方法都是真正确的。

或许有人问了,为什么定时器调用函数的时候,有时候会写引号,有时候没有引号。

一开始我定时器都是像下面这样写的 ↓↓

  setTimeout(()=>{  }, 0);

用箭头函数的方式写定时器,所以基本没在意过这个问题。

当我后来看别人写的代码的时候,发现定时器的方法调用上居然还写引号,还有这种调用方式吗?

后来经过查阅资料了解到

当你想用定时器,调用函数的时候,给函数传参的话,必须要加引号,否则会报错


  setTimeout("func(a,b)", 0);


传参a ,b 就可以这么写。


如果不传参的话,完全可以写成
  setTimeout(func, 0);

一问题得到解决从而表示你了解到的范围就更大了,随之而来的便是新的问题。


在定时器中加引号的同时,也会伴随着作用域的改变

 

  setTimeout(func, 0);      //这个定时器,它会优先寻找当前的作用域中是否有func函数,如果局部没有的话,则会依次按照顺序往上查找,直到全局作用域中。 

  setTimeout("func()", 0);   //而
这个定时器他的寻找func函数只会从全局寻找这个方法,不会从局部寻找。


同理而在定时器的函数中,this的指向也是不同的

在不加引号的定时器方法中
setTimeout(func, 0);
this的指向是指向当前函数的主人

而在加引号的定时器中
setTimeout("func()", 0);
他的指向永远是 Window
 
 


												

js中定时器调用函数时为什么会有引号的更多相关文章

  1. js中直接调用函数和new函数的区别

    如果函数返回值为常规意义上的值类型(Number.String.Boolean)时,new函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object.Array.Function),则 ...

  2. 详解 JS 中 new 调用函数原理

    JavaScript 中经常使用构造函数创建对象(通过 new 操作符调用一个函数),那在使用 new 调用一个函数的时候到底发生了什么?先看几个例子,再解释背后发生了什么. 1)看三个例子 1.1 ...

  3. JS中关于把函数作为另一函数的参数的几点小总结

    //JS中关于把函数作为函数的参数来传递的问题的小总结//第一,最简单的形式无参函数,直接形式函数的函数名放到括号中,再在执行部分这个函数即可.//当然调用时要穿另一个真正的定义好的函数/*funct ...

  4. JS中的箭头函数与this

    转载自:https://juejin.im/post/5aa1eb056fb9a028b77a66fd#heading-1 JavaScript在ES6语法中新增了箭头函数,相较于传统函数,箭头函数不 ...

  5. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

  6. underscore.js中的节流函数debounce及trottle

    函数节流   throttle and debounce的相关总结及想法 一开始函数节流的使用场景是:放止一个按钮多次点击多次触发一个功能函数,所以做了一个clearTimeout setTimeou ...

  7. js中如何在一个函数里面执行另一个函数

    1.js中如何在函数a里面执行函数b function a(参数c){ b(); } function b(参数c){ } 方法2: <script type="text/javasc ...

  8. js中的Generators函数

    js中的Generators函数 generator一般操作 generator函数的作用就是函数体分段执行,yield表示分隔点 function *test() { console.log(1); ...

  9. python 调用函数时使用星号 *, **

    python 调用函数时使用星号 *, ** 调用函数时使用星号 * 或 ** test(*args):* 的作用其实就是把序列 args 中的每个元素,当作位置参数传进去.如果 args 等于 (1 ...

随机推荐

  1. 宝塔面板无法进入phpadmin管理数据库解决办法

    ECS--华为云 宝塔面板6.0 phpMyAdmin 4.4 经过搜索发现问题在于端口和安全组规则 解决方法如下 1.在安全中添加888端口 2.华为云安全组规则--入方向规则--添加规则 3.打开 ...

  2. NB-IoT的PSM模式有什么优点

    在NB-IoT系统中,PSM模式的优点是可进行长时间休眠,缺点是对终端接收(Mobile Terminated,MT)业务响应不及时,主要应用于远程抄表等对下行实时性要求不高的业务.实际上,物联网设备 ...

  3. C语言100题集合-ex003

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

  4. 3、Django之路由层

    一 路由的作用 路由即请求地址与视图函数的映射关系,如果把网站比喻为一本书,那路由就好比是这本书的目录,在Django中路由默认配置在urls.py中. 二 简单的路由配置 # urls.py fro ...

  5. LR-demo

    from __future__ import print_function   # 导入相关python库 import os import numpy as np import pandas as ...

  6. Statistical physics approaches to the complex Earth system(相关系统建模理念方法的摘要)

    本文翻译自"Statistical physics approaches to the complex Earth system",其虽然是针对复杂地球系统的统计物理方法的综述,但 ...

  7. MSSQL 模糊搜索全文(过程、函数、触发器等)

    --SQL Server数据库查找含有某个关键字的存储过程.函数.触发器等 --SQL Server数据库查找含有某个关键字的存储过程,SQL语句如下: SELECT OBJECT_NAME(b.pa ...

  8. python文档自译:os模块-01【说明部分】

    15.1. os - Miscellaneous operating system interfaces This module provides a portable way of using op ...

  9. Mysql之存储过程与存储函数

    1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语 ...

  10. oracle 相关笔记

    1.查询语句执行顺序 from->where->[group by ]-> select ->distinct->count(某一列) 2.用命令执行存储过程用 exec ...