zoukankan      html  css  js  c++  java
  • setTimeout关于函数名做参数的问题

      前几天在调bug时发现一个诡异的问题。

    function test(){
        alert('4 seconds!');
    }
    setTimeout(test(),4000);

    这段代码立即执行,当时看不出问题的原因。只好先换了一种写法,如下。

    function test(){
        alert('4 seconds!');
    }
    setTimeout('test()',4000);

      这几天有空了,把这个问题的原因总结了一下:

    在js中,函数只要是要调用它进行执行的,都必须加括号。此时,函数()实际上等于函数的返回值。就是说,只要加括号的,就代表将会执行函数体代码。不加括号的,都是把函数名称作为函数的指针,用于传参,此时不是得到函数的结果,因为不会运行函数体代码。它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行。

    所以,

    function move(){}  <=>  move = function(){}
    也就是说 move是个变量,存储的是函数本身,你把函数本身传给setInterval。但是因为没有返回值,那setInterval每4000毫秒执行一次“空”,所以啥都没干。

    总之:当事件发生时要执行这个函数,那么只需要写函数名
    this.onclick = ch ;
    如果要执行函数,那么需要加括号
    ch();

     
     


  • 相关阅读:
    mysql max(),min()的优化
    统计网站某天的点击数
    小程序网络图片下载
    小程序封装
    小程序 封装调用
    小程序request封装
    git 使用
    MYSQL查询语句优化
    微信开发遇到的坑
    PHP支付宝支付开发流程
  • 原文地址:https://www.cnblogs.com/zhangyabin---acm/p/5007231.html
Copyright © 2011-2022 走看看