为什么不能在嵌套函数中访问局部范围变量

why cannot the local scope variable be visited in the nested function?

本文关键字:访问局 范围 变量 函数 不能 嵌套 为什么      更新时间:2023-09-26
    <from>
    <input type="number" placeholder="time interval" id="time">
    <input type="submit" id="submit" value="start">
    </form>
    <br>
    <br>
    <audio src="p.mp3" controls="controls" id="audio">
     Your browser does not support the audio tag.
    </audio>
    <script type="text/javascript">
        (function(){
             var music = document.getElementById('audio');
             var submit = document.getElementById('submit');
             //1
             var mytime =  document.getElementById('time').value*60000;
             function musicStart(){
                music.play();
             };
             submit.addEventListener('click',function(){
                //2, var mytime=document.getElementById('time').value*60000;
                 if(music.paused === true){
                    setTimeout(musicStart, mytime);
                    //music.play();
                 }else{
                    //time.value ="";
                    music.pause();
                 }
              })
        }());
    </script>

上面的脚本,当我把代码var mytime = document.getElementById('time').value*60000;放在 1 位时,它不能运行,只能在 2 位运行?

mytime变量(在function(){}中定义(应该在嵌套函数(在嵌套函数中定义(中访问。

为什么当我将 mytime 变量放在 1 位时它不起作用?帮助?

加载页面时,它会运行脚本,此时"time"输入为空,因此mytime的值将为空。

当您将其放入单击事件中时,当您运行单击时,它只会获取值,从而为您提供结果。

尝试在父函数中声明变量,然后在嵌套函数中初始化它:

<script type="text/javascript">
        (function(){
             var music = document.getElementById('audio');
             var submit = document.getElementById('submit');
             var mytime;
             function musicStart(){ music.play(); };
             submit.addEventListener('click',function(){
                mytime=document.getElementById('time').value*60000;
                 if(music.paused === true){
                    setTimeout(musicStart, mytime);
                    //music.play();
                 }else{
                    //time.value ="";
                    music.pause();
                 }
              })
        }());
    </script>