How to make a variable which is inside a function global?
下面是我的javascript函数,我想使用变量selected outside函数,但是我在inspect元素的控制台中得到selected not defined error。window.yourglobalvariable没有解决我的问题。
1 2 3 4 5 6 7 8 | function showMe(pause_btn) { var selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } } |
如果你真的希望它是全球性的,你有两个选择:
全局声明,然后在函数中关闭
1 2 3 4 5 6 7 8 9 | var selected; function showMe(pause_btn) { selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } } |
转让给
1 2 3 4 5 6 7 8 | function showMe(pause_btn) { window.selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); // Don't need `window.` here, could use it for clarity though } } } |
但是,我会避免全球化。或者让
1 2 3 4 5 6 7 8 9 | function showMe(pause_btn) { var selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } return selected; } |
…然后在需要的地方:
1 | var selected = showMe(); |
…或在包含
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | (function() { var selected; function showMe(pause_btn) { selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } return selected; } // ...other stuff that needs `selected` goes here... })(); |
外部匿名函数是一个"作用域函数",这意味着
不要使用这个;
1 | selected = []; |
这是一个javascript的漏洞
1 | window.selected = []; |
在你的功能里面。
这样做:
1 2 3 4 5 6 7 8 9 10 | var selected; function showMe(pause_btn) { selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } } |
实际上,您可以跳过
如果将
1 2 3 4 5 6 7 8 | function showMe(pause_btn) { window.selected = []; for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } } |
1 2 3 4 5 6 7 8 9 | var selected = []; function showMe(pause_btn) { for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } } |
可以在定义了名为
在代码方面:
1 2 3 4 5 6 7 8 9 | var selected = []; function showMe(pause_btn) { for (var i = 0; i < chboxs.length; i++) { if (chboxs[i].checked) { selected.push(chboxs[i].value); } } } |