[英]Getting a global JS variable to 'work' inside a function
我在让我相信是全局JS变量的函数内部工作时遇到了麻烦。 这是我的代码的部分摘录:
<script>
prop_no = 2;
if (prop_no) {
alert ('global prop_no initialised ' + prop_no);
} else {
alert ('no prop_no');
}
function getHtml() {
// alert('getHtml called');
var len = $('ul.extraProperty').length; // length of <ul> containing the added properties
if (prop_no) {
alert ('prop_no valid locally '+ prop_no);
} else {
alert ('no local prop_no');
}
... more code...
}
... more ...
getHtml();
</script>
我想将“ len”的值与“ prop_no”进行比较,并根据结果调整“ prop_no”的值,然后再进行其他操作。
我一直了解,如果在全局(在函数外部)声明了var,那么它将在内部可用,但这似乎不是我要的。 调用该函数时,我希望收到警报“ prop_no本地有效2”,但实际上却收到“ no local prop_no”。 我不明白为什么。
如果我将功能更改为:
function getHtml(prop_no)...
并致电:
getHtml(prop_no);
然后我得到我后。 但是,我不确定在这种情况下将获得什么价值(该功能从复选框“添加其他属性”中调用)。
请参阅: https ://jsfiddle.net/ramasaig/yrpoo6v7/18/我知道“删除属性”按钮尚无法使用; 这就是我要处理的,因为删除属性会影响属性编号。
我可能还要全局声明一些其他变量,并在函数内部使用它们。 我还需要对函数内部的那些变量进行任何更改,以在下次调用该函数时应用。 我查看了作用域规则,在我看来,我正在做的事情应该起作用,但事实并非如此。
有人可以告诉我我在这里做错了吗(或者为什么我做错了,如果是这样的话)。
在您的小提琴的第38行上,您正在设置一个本地 var prop_no
,它使对外部prop_no
变量的引用成为阴影。
31. if (prop_no) {
32. alert ('local prop_no initialised' + prop_no);
33. } else {
34. alert ('no local prop_no');
35. }
36.
37. // alert('length is ' + len);
>38. var prop_no = len + 2; // makes first sub-form 'Property 2' // <-- RIGHT HERE
问题中的代码与jsfiddle之间的区别是:
prop_no = 2;
和
prop_no = 2
var prop_no = len + 2
即prop_no
在getHtml()方法中声明,即使在使用后“声明”了它。
在javascript中,放置'var'的顺序无关紧要-如果方法中有var,则变量的作用域将在该方法中。
这就是为什么它适用于直接复制代码而不是为您复制的@Andy的原因-问题并不包含所有详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.