Javascript 属性作为变量



如果我在全局范围内声明一个属性(itemSize,在我的例子中)没有var这个词,代码就可以了

var vbo = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER,vbo);
gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW);
vbo.itemSize = 3;//This line works

如果我用单词var声明相同的属性,则代码不起作用,控制台显示意外令牌。

var vbo = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER,vbo);
gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW);
var vbo.itemSize = 3; //Unexpected token "."

而如果我在函数中声明 vbo.itemsize,它会再次工作。为什么我不能在全局范围内将属性设置为 var?该属性不应该被读作window.vbo.itemsize吗?

你可以,问题是你正在声明vbo为其itemSize属性赋值,这会导致解释器尝试声明一个名为vbo.itemSize的变量。由于不能声明名称中包含句点的变量,因此会出现指定的错误。此代码:

vbo.itemSize = 3;//This line works

不会创建新的全局变量,它会在 vbo 变量上创建一个 itemSize 属性,并将值3分配给它,这是完全合法的,与 vbo 变量的范围无关。 中的变量

var vbo.itemSize = 3; //Unexpected token "."

也是多余的,因为 vbo 变量已经声明。 您还可以通过执行以下操作将值分配给vbo.itemSize和全局itemSize

var itemSize = vbo.itemSize = 3

如果要在全局范围以外的任何位置执行此操作,请执行

window['itemSize'] = vbo.itemSize = 3

这将正确3分配给vbo.itemSize和全局itemSize(窗口是全局范围)

相关内容

  • 没有找到相关文章

最新更新