如果我在没有单词var的全局范围内声明属性(在我的情况下为itemSize),则代码可以正常工作
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?
答案 0 :(得分:3)
你可以,问题是你宣布vbo
和为其itemSize
属性赋值,这会导致解释器尝试声明一个名为{的变量{1}}。由于您无法在名称中声明具有句点的变量,因此会收到指定的错误。这段代码:
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
(窗口是全局范围)