Javascript属性为var

时间:2014-11-26 15:06:48

标签: javascript properties global-variables

如果我在没有单词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?

1 个答案:

答案 0 :(得分:3)

你可以,问题是你宣布vbo 为其itemSize属性赋值,这会导致解释器尝试声明一个名为{的变量{1}}。由于您无法在名称中声明具有句点的变量,因此会收到指定的错误。这段代码:

vbo.itemSize

不创建新的全局变量,它会在vbo.itemSize = 3;//This line works 变量上创建itemSize属性,并为其赋值vbo,这是完全合法的,无关与3变量的范围。

中的var
vbo

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

itemSize

如果你想在全局范围以外的地方做这个,请执行

var itemSize = vbo.itemSize = 3

window['itemSize'] = vbo.itemSize = 3 正确分配给3和全局vbo.itemSize(窗口是全局范围)