更改子局部函数中全局变量的值 javascript
Changing value of global variable in sub local function javascript
此代码的大部分内容无需解释。如您所见,全局变量 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. 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()
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)
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
设置为 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. 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()
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)
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. };