只是一个简单的问题.当我声明一个这样的变量时:
var ballctx = ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
Run Code Online (Sandbox Code Playgroud)
它是先尝试左边还是右边?如果ctx ballctx不存在,我希望它创建一个新的画布.如果确实如此,则使用它.
左边第一个.||使用所谓的短路评估,也称为最小评估,这意味着它只会评估表达式的右侧,如果左侧是假的.
来自ECMAScript语言规范:
生产LogicalORExpression:
LogicalORExpression || LogicalANDExpression评估如下:
- 让lref成为评估LogicalORExpression的结果.
- 设lval为GetValue(lref).
- 如果ToBoolean(lval)为true,则返回lval.
- 让rref成为评估LogicalANDExpression的结果.
- 返回GetValue(rref).
因此,在你的表达中:
ctx['ballctx'] || createCanvas('game-screen', 'ballctx');
^-- lval ^-- rval
Run Code Online (Sandbox Code Playgroud)
如果lval 评估为true,rval则不会进行评估.换句话说,如果ctx['ballctx']求值为false ,您将只创建一个新画布,因此您的代码是正确的.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |