Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将函数内的变量从另一个函数更改为什么';这是最好的办法吗?_Javascript - Fatal编程技术网

Javascript 将函数内的变量从另一个函数更改为什么';这是最好的办法吗?

Javascript 将函数内的变量从另一个函数更改为什么';这是最好的办法吗?,javascript,Javascript,更新: 谢谢你的回答,我知道把它们放在一个更大的范围是一个很好的解决方案。但是,如果这两个函数是从不同的外部JavaScript文件加载的,但在同一个页面上,该怎么办 例如,左侧按钮的处理程序来自a.js,第二个按钮的处理程序来自b.js,并且b.js甚至在某些事件触发后加载 我有一个函数,里面有一个变量。我想从另一个问题更新这个变量,什么是最好的方法 代码如下: $(“#更新”)。单击(函数(){ //单击此按钮后,我想将另一个函数中的“x”更改为随机数或其他任何内容。 }) $(“#测试

更新:

谢谢你的回答,我知道把它们放在一个更大的范围是一个很好的解决方案。但是,如果这两个函数是从不同的外部JavaScript文件加载的,但在同一个页面上,该怎么办

例如,左侧按钮的处理程序来自
a.js
,第二个按钮的处理程序来自
b.js
,并且
b.js
甚至在某些事件触发后加载


我有一个函数,里面有一个变量。我想从另一个问题更新这个变量,什么是最好的方法

代码如下:

$(“#更新”)。单击(函数(){
//单击此按钮后,我想将另一个函数中的“x”更改为随机数或其他任何内容。
})
$(“#测试”)。单击(函数(){
var x=1;
a();
函数a(){
警报(x);
}
})
//这可以通过全球方式实现,但这是必须的方法吗?
$(“#全局#u更新”)。单击(函数(){
window.y=Math.random();
})
$(“#全局#u测试”)。单击(函数(){
window.y=window.y?window.y:1;
a();
函数a(){
警报(y);
}
})

警觉的
更新

警报(全球)
更新(全局)
如果不想污染全局范围,可以将这两个函数包装在IIFE中,并在IIFE范围中声明共享变量

(function(){
  var x;
  $('#global_update').click(function(){
    x = Math.random();
  })
  $('#global_test').click(function(){
    x = x ? x : 1;
    a();
    function a(){
      alert(x);

    }
  })
})();
要回答您关于使用两个不同js文件的场景的问题,您无法在它们之间创建共享的公共作用域,在这种特定情况下,您必须依赖全局作用域

您可以在导入脚本之前定义窗口的一种子范围,并在脚本中引用该子范围

<script>
  window.subScopeAB = {
    x: 0
  }
</script>
<script src="a.js"></script>
<script src="b.js"></script>
b、 js


如果不想污染全局作用域,可以将这两个函数包装在IIFE中,并在IIFE作用域中声明共享变量

(function(){
  var x;
  $('#global_update').click(function(){
    x = Math.random();
  })
  $('#global_test').click(function(){
    x = x ? x : 1;
    a();
    function a(){
      alert(x);

    }
  })
})();
要回答您关于使用两个不同js文件的场景的问题,您无法在它们之间创建共享的公共作用域,在这种特定情况下,您必须依赖全局作用域

您可以在导入脚本之前定义窗口的一种子范围,并在脚本中引用该子范围

<script>
  window.subScopeAB = {
    x: 0
  }
</script>
<script src="a.js"></script>
<script src="b.js"></script>
b、 js


您不能在不同的范围内更改局部变量,而且确实不应该,因为这完全违背了变量范围的目的。如果您想通过变量共享状态,它必须在两个函数的作用域内,但这并不意味着它必须是全局的。只需定义一个包含两个事件处理程序的新范围,并在该范围内定义变量:

(function () {

  var x;

  $('#update').click(function(){
    x = Math.random();
  })
  $('#test').click(function(){
    x || (x = Math.random());
    a();
    function a(){
      alert(x);
    }
  })
})();

您不能在不同的范围内更改局部变量,而且确实不应该,因为这完全违背了变量范围的目的。如果您想通过变量共享状态,它必须在两个函数的作用域内,但这并不意味着它必须是全局的。只需定义一个包含两个事件处理程序的新范围,并在该范围内定义变量:

(function () {

  var x;

  $('#update').click(function(){
    x = Math.random();
  })
  $('#test').click(function(){
    x || (x = Math.random());
    a();
    function a(){
      alert(x);
    }
  })
})();

将函数设置为全局函数,而将变量设置为全局变量

例如(在伪代码中)


将函数设置为全局函数,而将变量设置为全局变量

例如(在伪代码中)


谢谢,卡里姆,我已经更新了我的问题。你能看一下吗?我明白了。谢谢看起来很公平,但我仍然希望找到一些鼓舞人心的建议。也许上述解决方案可以帮助你。谢谢,经过长期的研究,你的方式看起来非常整洁和酷。很高兴它有帮助:)谢谢,卡里姆,我更新了我的问题。你能看一下吗?我明白了。谢谢看起来很公平,但我仍然希望找到一些鼓舞人心的建议。也许上述解决方案可以帮助你。谢谢,经过长期的研究,你的方式看起来非常整洁和酷。很高兴它有帮助:)谢谢,米加,我更新了我的问题。你能看一下吗?谢谢,米格,我已经更新了我的问题。请你看一下好吗?谢谢,罗普卢斯,我已经更新了我的问题。请你看一下好吗?谢谢,罗普卢斯,我已经更新了我的问题。请你看一下好吗?