Javascript 让全局JS变量在函数中“工作”

Javascript 让全局JS变量在函数中“工作”,javascript,jquery,global,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'

我很难让我认为是全局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>
以及呼吁:

 getHtml(prop_no);
然后我得到我想要的。但是,我并不完全确定在这种情况下,函数将从“添加另一个属性”复选框中调用

见: 我知道“移除属性”按钮还不起作用;这就是我正在做的,因为删除属性会影响属性编号

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

有人能告诉我我做错了什么,或者为什么不管我做什么它都不起作用,如果是这样的话,请告诉我。

在小提琴的第38行,您正在设置一个本地变量prop\u no,它将外部prop\u 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

问题中的代码与JSFIDLE之间的区别在于:

prop_no = 2;

ie prop_no在getHtml方法中声明,即使它是在您使用它之后声明的

在javascript中,放置“var”的顺序无关紧要——如果方法中有var,变量的作用域将在该方法中


这就是为什么它适用于@Andy,他直接复制了您的代码,而不适用于您-问题不包括所有细节。

将prop_no=2更改为var prop_no=2是否会产生影响?您问题中的代码不能准确地表示您的JSFIDLE。在getHTML函数中有var prop_no。这彻底改变了一切。@JamesThorpe我支持你。这就是所谓的提升。再见,谢谢。奇怪的是,我今天以前从来没有遇到过吊装。我开始编写一些工作得非常好的代码,直到我开始尝试添加全局prop_no变量。这也是为什么我的问题,我已经削减到最低限度不同于小提琴。谢谢。见我对上一个问题的评论。我相信我能从这里解决。
prop_no = 2;
prop_no = 2
var prop_no = len + 2