Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改子局部函数javascript中全局变量的值_Javascript_Variables_Global Variables - Fatal编程技术网

更改子局部函数javascript中全局变量的值

更改子局部函数javascript中全局变量的值,javascript,variables,global-variables,Javascript,Variables,Global Variables,没有必要解释这段代码的大部分内容。如您所见,全局变量cancel设置为true。然后调用一个函数,其中变量cancel被更改似乎我可以访问第15行、第27行或第32行的cancel变量。您能解释一下它为什么不工作以及我如何修复它吗?谢谢!请提出任何其他问题。我没有在这里解释其他代码,因为我不认为它直接与问题有关,如果我是,这会使这个问题太长而无法阅读 1. var cancel = 'true'; 2. function setSliders() 3. { 4. var sliders = d

没有必要解释这段代码的大部分内容。如您所见,全局变量
cancel
设置为true。然后调用一个函数,其中变量
cancel
被更改似乎我可以访问第15行、第27行或第32行的
cancel
变量。
您能解释一下它为什么不工作以及我如何修复它吗?谢谢!请提出任何其他问题。我没有在这里解释其他代码,因为我不认为它直接与问题有关,如果我是,这会使这个问题太长而无法阅读

1. var cancel = 'true';
2. function setSliders()
3. {
4.  var sliders = document.getElementsByClassName('slider');
5.  var sliderButtons = document.getElementsByClassName('sliderButton');
6.  for(var i = 0; i != sliderButtons.length; i++)
7.  {
8.      var slider = document.getElementsByClassName('sliderButton')[i];
9.      slider.onmousedown = function()
10.     {
11.         cancel = 'false';
12.         this.onmouseup = function(cancel)
13.         {
14.             cancel = 'true';
15.             alert(cancel +' within semi function cancel does not seem to be accessible here');
16.             //alert('test');
17.         };
18.         
19.         alert(cancel+' within function');
20.         
21.         this.onmousemove = function(event, cancel)
22.         {
23.             if(cancel == 'false')
24.             {
25.                 console.log('cancel is false'); //cancel doesn't seem to be accessible here either.
26.                 this.style.left = event.clientX+'px';
27.                 cancel = 'true';
28.             }
29.             else
30.             {
31.                 console.log('cancel is true'); //cancel isn't accessible here either.
32.                 cancel = 'false';
33.             }
34.         };
35.     };

cancel
作为函数的参数名,使这些函数中的
cancel
成为该函数的本地参数

如果从参数中删除
cancel
,它将引用全局
cancel
变量,应该可以工作

1。var cancel='true';
2.函数setSliders()
3.{
4.var sliders=document.getElementsByClassName('slider');
5.var sliderButtons=document.getElementsByClassName('sliderButton');
6.for(var i=0;i!=sliderButtons.length;i++)
7.  {
8.var slider=document.getElementsByClassName('sliderButton')[i];
9.slider.onmousedown=函数()
10.     {
11.取消='假';
12.this.onmouseup=函数()
13.         {
14.cancel='true';
15.警报(半功能取消中的“取消+”在此处似乎不可访问);
16//警报(“测试”);
17.         };
18
19.警报(取消+‘功能内’);
20
21.this.onmousemove=函数(事件)
22.         {
23.如果(取消=='false')
24.             {
25.console.log('cancel is false');//这里似乎也无法访问cancel。
26.this.style.left=event.clientX+'px';
27.cancel='true';
28.             }
29.其他
30.             {
31.console.log('cancel is true');//此处也无法访问cancel。
32.取消='假';
33.             }
34.         };

35.};
您将其设置为回调函数的参数,并且它会隐藏全局变量。