词法作用域与动态作用域
JavaScript 采用的是词法作用域(lexical scoping)
JavaScript 函数的作用域在函数定义的时候就确定了,所以实际使用的值与函数定义位置有关系。
1 | let value = 1 |
上面这个例子中,foo
函数中的value
向上寻找为在全局定义的1
,所以会打印出1
。
1 | value=1 |
而在bash
中,由于是动态作用域,所以会打印出2
。
JavaScript 函数的作用域在函数定义的时候就确定了,所以实际使用的值与函数定义位置有关系。
1 | let value = 1 |
上面这个例子中,foo
函数中的value
向上寻找为在全局定义的1
,所以会打印出1
。
1 | value=1 |
而在bash
中,由于是动态作用域,所以会打印出2
。
1 | function parseXml(xml) { |
1 | //序列化 xmldom 文档 |
WebGL 使用两种 Shader:
Shader Program 使用的是 GLSL ES 语言,在 JS 中需要使用字符串编写,再通过函数加载进去。
WebGL 的执行流程大致为:
在 GLSL ES 中,vec4
类型用四维适量描述一个点的三维空间投影,(x, y, z, w)
等价与三维空间的(x / w, y / w, z / w)
。
WebGL 坐标系统水平向右为 x 正轴,竖直向上为 y 正轴,垂直屏幕向外为 z 正轴。范围都在[-1, 1]
之间。
位运算符是三步处理的过程:
1 | var iNum1 = 25 //25 等于 00000000000000000000000000011001 |
这是刷题时看见别人的代码里使用的东西,通常用来代替 Math.trunc()的方法。
1 | //单个 ~ |
当原始输入不确定时,~~可以将任何非数字类型转换成 0:
1 | console.log(~~[]) //0 |