<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
名称的变量。
答案 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>