Javascript 将函数内的变量从另一个函数更改为什么';这是最好的办法吗?
更新: 谢谢你的回答,我知道把它们放在一个更大的范围是一个很好的解决方案。但是,如果这两个函数是从不同的外部JavaScript文件加载的,但在同一个页面上,该怎么办 例如,左侧按钮的处理程序来自Javascript 将函数内的变量从另一个函数更改为什么';这是最好的办法吗?,javascript,Javascript,更新: 谢谢你的回答,我知道把它们放在一个更大的范围是一个很好的解决方案。但是,如果这两个函数是从不同的外部JavaScript文件加载的,但在同一个页面上,该怎么办 例如,左侧按钮的处理程序来自a.js,第二个按钮的处理程序来自b.js,并且b.js甚至在某些事件触发后加载 我有一个函数,里面有一个变量。我想从另一个问题更新这个变量,什么是最好的方法 代码如下: $(“#更新”)。单击(函数(){ //单击此按钮后,我想将另一个函数中的“x”更改为随机数或其他任何内容。 }) $(“#测试
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);
}
})
})();
将函数设置为全局函数,而将变量设置为全局变量 例如(在伪代码中)
将函数设置为全局函数,而将变量设置为全局变量 例如(在伪代码中)
谢谢,卡里姆,我已经更新了我的问题。你能看一下吗?我明白了。谢谢看起来很公平,但我仍然希望找到一些鼓舞人心的建议。也许上述解决方案可以帮助你。谢谢,经过长期的研究,你的方式看起来非常整洁和酷。很高兴它有帮助:)谢谢,卡里姆,我更新了我的问题。你能看一下吗?我明白了。谢谢看起来很公平,但我仍然希望找到一些鼓舞人心的建议。也许上述解决方案可以帮助你。谢谢,经过长期的研究,你的方式看起来非常整洁和酷。很高兴它有帮助:)谢谢,米加,我更新了我的问题。你能看一下吗?谢谢,米格,我已经更新了我的问题。请你看一下好吗?谢谢,罗普卢斯,我已经更新了我的问题。请你看一下好吗?谢谢,罗普卢斯,我已经更新了我的问题。请你看一下好吗?