获取全局JS变量以在函数内“工作”

时间:2015-09-24 13:29:12

标签: javascript jquery global

我无法获得我认为是在函数内部工作的全局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'按钮还不起作用;这就是我正在做的事情,因为删除属性会影响属性编号。

我可能还有一些其他变量要全局声明并在函数内部使用。我还需要对函数内部的那些变量进行任何更改,以便在下次调用函数时应用。我已经查看了范围规则,在我看来,我正在做的事情应该起作用,但事实并非如此。

有人可以告诉我,我在这里做错了什么(或者为什么不管我做什么,如果是这样的话),请。

2 个答案:

答案 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直接复制代码但不适合您的原因 - 问题并未包含所有细节。