修改特定的JavaScript变量

时间:2018-07-31 19:08:21

标签: javascript

<html>

<body>
  <script type="text/javascript">var ajax_array = {"type":"all_users","kind":"users"};</script>

  <div class="modal users-list">
    <div class="list">
        <script type="text/javascript">var ajax_array = {"type":"all_users","kind":"users"};</script>
    </div>
  </div>
</body>

</html>

我想修改模式.users-list中不直接存在于<body>标记中的ajax_array变量的数组。

我的问题是如何搜索需要修改的变量?我只知道,如果我需要修改直接像这样的变量ajax_array.kind = 'posts',但这会修改​​所有具有ajax_array名称的变量。

4 个答案:

答案 0 :(得分:0)

这是因为它们在全球范围内。将它们包装在IIFE中,这样它们就不会在该范围之外被覆盖:

(function(){
// your code here...
// now, if you override ajax_array.kind = 'posts'
// this will only override inside this scope
}());

答案 1 :(得分:0)

最简单的解决方法是仅使用另一个变量名。在javascript中,var不受严格的范围限制,因此,当您调用ajax_array时,您只是在重写或修改您的第一个调用。

<html>

<body>
  <script type="text/javascript">var ajax_array = {"type":"all_users","kind":"users"};</script>
  <div class="modal users-list">
    <div class="list">
        <script type="text/javascript">
          var foo = {"type":"all_users","kind":"users"}; // Initialize to the same value
          // Do whatever to foo
        </script>
    </div>
  </div>
</body>

</html>

答案 2 :(得分:0)

您为什么还要这样做?更好的方法可能是使用隐藏的输入类型,然后获取该隐藏的输入类型的值。并且,如果您必须像这样更改变量名称那样做。 Var是全局范围变量,它将在窗口范围(全局对象)中创建。它是一个键值对,因此一个键只能包含一个值

答案 3 :(得分:0)

var将变量的范围设置为在变量中声明的函数,或者,如果未在函数中声明,则设置为全局范围(请参见documentation)。这意味着,如果我在一个脚本块中使用var声明了一个变量,则该变量将在另一个脚本块中可访问:

<script>
    var foo = "bar";
</script>
<script>
    console.log(foo); // logs "bar" to the console
</script>

如果您希望变量的作用域是您的脚本标签,则可以将let与一个块({})结合使用,该块声明了更多变量。受限范围(请参见documentation

<script>
{
    // foo is only defined within the opening and closing curly braces
    let foo = "bar";
}
</script>
<script>
    console.log(foo); // error: foo is not defined
</script>

因此,如果要在两个脚本标签中重复使用相同的变量名,则可以使用以下代码:

<script>
{
    let foo = "bar1";
}
</script>
<script>
{
    // this is a different foo... changing it will not affect the first one
    let foo = "bar2";
}
</script>