繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM