Javascript作用域,赋值

Javascript scope, assiging values

本文关键字:赋值 作用域 Javascript      更新时间:2023-09-26

我有这个"小盒子"在。php文件,但在html部分:

  X: <input name="translate_x" id="translate_x" type="text" maxlength="3" value="0" onchange=""/></br>

在另一个文件。js中,我有:

JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
    console.log("woop");
    function changex() {
        tx = parseFloat(document.getElementById('translate_x').value) + "<br>";
    }
    console.log(tx);
    this.m03 += tx;
    this.m13 += ty;
    this.m23 += tz;
};

和控制台告诉我没有定义changex()函数。我想要的是,当我在文本框中输入数字时,它会给tx赋值,有人能帮我解决这个问题吗?

/////////////////////////////////////
I made It working perfectly now, here is code : 
html file:
    X: <input name="translate_x" id="translate_x" type="text" maxlength="3" value="0" onchange=""/></br>
.js file:
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
var t=0;
 t = parseFloat(document.getElementById('translate_x').value);
console.log(t);
    if(t!=0)
    {
    console.log(this.m03);
    this.m03 += tx;
     tx=t;
     this.m03 += tx;
    this.m13 += ty;
    this.m23 += tz;
    }
    else
    {
    this.m03 += tx;
    this.m13 += ty;
    this.m23 += tz;
    }
};

您已经正确地识别出这是关于范围的。由于函数changex是在函数JSC3D.Matrix3x4.prototype.translate中定义的,因此它只存在于该函数中,并且只能从该函数中调用。为了能够从onchange事件调用它,您必须全局声明它。这可以通过把它移开来实现,像这样:

JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
console.log("woop");
console.log(tx);
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
};
function changex() {
 tx = parseFloat(document.getElementById('translate_x').value) + "<br>";
}

但是,请注意现在有两个名为tx的变量。一个是translate的参数,因此它的作用域就是那个函数。另一个在changex中使用,除非它在函数外部声明,否则它的作用域将在其中。

修改changex中的tx不会影响翻译中的tx