如果我在全局范围内声明了一个属性(在我的情况下为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这个词声明了相同的属性,则该代码将不起作用,并且控制台会显示Unexpected token。
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
不会创建新的全局变量,而是在
itemSize
变量上创建vbo
属性,并为其分配值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
(窗口是全局范围)