Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.5k views
in Technique[技术] by (71.8m points)

为什么我在js 的mouseomve里写一个计时器,计时器里调用的是外面写的一个方法·,这个方法不能加引号

function nn(b){
    console.log(b+1)
}
setInterval("nn(3)", 10) 
nmousemove=function zz(){
    
setInterval(nn(5), 10) //nn(5)不能加上引号,他只输出一次
  }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

这没什么好讲的。先放结果,下面这几种都是可以使用的。

  1. setInterval('nn(5)', 10)
  2. setInterval(nn.bind(window,5), 10)
  3. setInterval(function {nn(5)}, 10)

接下来看问题:

  1. setInterval 方法的定义是什么?
    传入一个 function ,然后每隔一定时间调用一次
  2. nnnn(5) 有什么区别?
    nn 是一个变量,就把变量代表的内容输出一下,返回的是一个function
    nn(5) 是执行了一个方法,然后把return出来的内容输出一下,返回的是一个undefined

好了,收敛一下。通过上面的内容我们知道了,setInterval 要的是一个 function,然后定时执行。那么你 nn(5) 的时候其实就已经执行了,然后 setInterval 真正接收到的是 undefined。所以出现了只执行了一次,setInterval 一直在执行寂寞。

你可以试一下下面这个例子

nn = function(count){
    console.log('outer', count)
    return function(){
        console.log('inner', count)
    }
}
setInterval(nn(5), 10)
setInterval(nn, 10)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...