我无法获得我认为是在函数内部工作的全局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是全局声明的(在函数之外),那么它将在里面可用,但这似乎不是我得到的。当调用该函数时,我期待Alert“prop_no local local 2”,但实际上我得到“no local prop_no”。我不明白为什么。
如果我将功能更改为:
function getHtml(prop_no)...
和致电:
getHtml(prop_no);
然后我得到了我想要的东西。但是,我并不完全确信在这种情况下将会获得什么价值(该功能是从复选框“添加另一个属性”调用的)。
请参阅:https://jsfiddle.net/ramasaig/yrpoo6v7/18/ 我知道'删除Proprty'按钮还不起作用;这就是我正在做的事情,因为删除属性会影响属性编号。
我可能还有一些其他变量要全局声明并在函数内部使用。我还需要对函数内部的那些变量进行任何更改,以便在下次调用函数时应用。我已经查看了范围规则,在我看来,我正在做的事情应该起作用,但事实并非如此。
有人可以告诉我,我在这里做错了什么(或者为什么不管我做什么,如果是这样的话),请。
答案 0 :(得分:5)
在您的小提琴中 38 ,您正在设置一个本地 var prop_no
,它会隐藏对外prop_no
变量的引用。< / p>
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
答案 1 :(得分:0)
问题中的代码与jsfiddle的区别在于:
prop_no = 2;
和
prop_no = 2
var prop_no = len + 2
ie prop_no
在getHtml()方法中声明,即使它已声明&#34;&#34;在你使用它之后。
在javascript中,您放置&var;&#39; var&#39;的顺序并不重要。 - 如果方法中有var,则该变量将在该方法中作为范围。
这就是为什么它适用于@Andy直接复制代码但不适合您的原因 - 问题并未包含所有细节。