Javascript 变量不在函数外部更改

Javascript 变量不在函数外部更改,javascript,jquery,Javascript,Jquery,您好,我已经创建了一个函数,我在其中检查输入字段的值,并使用作为变量输入的数字。如何编写代码,使变量可以在此函数之外使用?例如,将光线更改为等于val var val = $('input').val(); $('input').change(function(){ var val = $(this).val(); console.log(val); init(val); }); var w = c.width = window.innerWidth, h =

您好,我已经创建了一个函数,我在其中检查输入字段的值,并使用作为变量输入的数字。如何编写代码,使变量可以在此函数之外使用?例如,将光线更改为等于val

var val = $('input').val();
$('input').change(function(){
    var val = $(this).val();
    console.log(val);
    init(val);
});

var w = c.width = window.innerWidth,
    h = c.height = window.innerHeight,
    ctx = c.getContext('2d'),

    opts = {
        rays: val,
替换

  var val = $(this).val();


否则您将重新定义变量。

我认为您正在为变量范围而挣扎。当您在change函数中使用关键字
var
时,您是在局部范围内定义与全局范围变量同名的变量。这将覆盖全局变量,但仅在局部函数的范围内

var opts = {
    get rays(){
       return val;
    }
}
var-val='';
var init=函数(值){
变量$test=$('.test');
$test.html(值);
}
$('input').change(函数(){
val=$(this.val();
控制台日志(val);
初始值(val);
});


您可以使用将函数绑定到对象属性并在每次查找属性时使用该函数的返回值的

你也需要改变

var val = $(this).val();//inside the change event handler

这样,您就不会重新声明局部范围的val变量,而是将值重新指定给全局val变量

var opts = {
    get rays(){
       return val;
    }
}
var val=$('input').val();
$('input').change(函数(){
val=$(this.val();
console.log('val:',val);
log('opts.rays:',opts.rays');
});
变量选项={
获取射线{
返回val;
}
}


什么意思,在方法之外可用?首先,您有两个
val
变量,因为您用var限定了它们的范围,所以对内部变量的更改不会更改外部变量。您可以通过从事件处理程序中删除var来“修复”这个问题。我稍微改变了这个问题,因为这不起作用,您能帮忙吗@taplar这可能与作用域有关:如果您希望在某些地方使用新的
val
,则必须将其传递给一个方法,或者在它可用后使用它的逻辑。单击处理程序之后的逻辑不会自动重新运行。将该逻辑放入函数中,然后从单击处理程序调用该函数,并传入value@Taplar请举个例子好吗?如果可能的话,将其作为一个答案发布?如果你真的解释他们为什么要做出这样的改变,这会对提问者帮助更大。谢谢你的帮助,这对我的需要不起作用,我已经稍微改变了问题,你能重新阅读吗?谢谢你的帮助,香草版看起来不错。我正在努力用我已有的代码翻译新名字。请您使用我提供的代码来编写这篇文章好吗?我在顶部提供了一个关于您的问题的最小工作示例(您的代码片段本身没有做任何事情)。vanilla js只是一种更清晰的方式来解释哪里出了问题:)。在没有HTML的情况下添加js无助于重现问题:)。我建议大家多读一些例子,因为看起来你们可能比较新,所以在这里也会有所帮助。另外,如果你看一下我答案中的最上面的例子,你会发现它在这里是可执行的,所以不需要小提琴。要做到这一点,您可以使用编辑器,它是一个靠近代码块按钮的按钮。希望这有帮助:)。
var opts = {
    get rays(){
       return val;
    }
}