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

Getting a global JS variable to 'work' inside a function

本文关键字:工作 函数 全局 JS 变量 获取      更新时间:2023-09-26

我无法让我认为是全局 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(在函数外部(,那么它将在内部可用,但这似乎不是我得到的。调用该函数时,我期望警报"在本地 2 prop_no有效",但实际上我得到"没有本地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而不是您 - 这个问题不包括所有细节。