出于好奇的好奇心,为什么javascript会接受
var z = z || [];
Run Code Online (Sandbox Code Playgroud)
初始化z(因为z可能最初定义)
但没有var,它会抛出一个错误(在全球空间)
z = z || [];
Run Code Online (Sandbox Code Playgroud)
(如果z先前未定义)
在全球空间中,您不需要使用VAR,但我得到它可能是不好的做法.
在你说这是一个重复的问题之前
注意声明"如果你在全球范围内那么没有区别."
显然,根据我的工作实例,这并非100%正确.
这是一个怪癖还是有合法的逻辑?
在我学会的时候添加答案摘要:
感谢蒂姆(见下文)我误解的关键是没有意识到这一点(javascript的基础)
var z; 如果z已经存在,则绝对没有
这就是这个表达式似乎有两种方式,如果你错误的假设"var z"总是初始化.
从左边开始,"var z"只是确保定义了z,但是如果已经存在,则实际上不会影响任何现有值.然后在右边,如果z已经存在,则使用它,否则,变量刚刚被声明(但是为空),因此它不会被使用但不会引发错误.
这是关于Javascript中这种范围和提升问题的优秀文章:http: //www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting
非常感谢minitech和其他所有贡献者!
我想要通过一长串潜在的解释变量,依次回归每个反应变量.而不是粘贴模型公式,我正在考虑使用reformulate(),
如此处所示.
fun()下面的功能似乎完成了工作,适合所需的模型.但请注意,它在其call元素中记录了构造的公式对象的名称而不是其值.
## (1) Function using programmatically constructed formula
fun <- function(XX) {
ff <- reformulate(response="mpg", termlabels=XX)
lm(ff, data=mtcars)
}
fun(XX=c("cyl", "disp"))
#
# Call:
# lm(formula = ff, data = mtcars) <<<--- Note recorded call
#
# Coefficients:
# (Intercept) cyl disp
# 34.66099 -1.58728 -0.02058
## (2) Result of directly specified formula (just for purposes of comparison)
lm(mpg ~ cyl + disp, data=mtcars)
#
# Call:
# lm(formula = …Run Code Online (Sandbox Code Playgroud) 在http://shiny.rstudio.com/articles/scoping.html上,很好地解释了有光泽的范围规则.有3个环境或级别彼此嵌套:函数内,会话内和所有会话中可用的对象.使用< - 将更改您所在环境中的对象,<< - 将全局更改它,即对于所有会话.
如果我在会话中定义变量但想要在函数中更改它,该怎么办?
< - 只会在函数内更改它,因此其他函数无法读取,<< - 将为所有会话更改它.中间什么都没有?就像"只是一级"?
在下面的typescript函数中,'this'不会解析为EmailValidator的实例.如何更正此功能,以便它解析为正确的EmailVaildator实例,以便我可以访问_registerServices?
class EmailValidator {
constructor(private _registerServices: RegisterServices) { }
isAvailable(c: AbstractControl): Promise<ValidationResult> {
let q = new Promise((resolve, reject) => {
this._registerServices.emailIsAvailable(antiForgeryToken(), c.value)
.then(result => {
// Need to actually check the result.
resolve({ "emailtaken": true })
},
error => {
// Need to communicate the server error? Probably not.
resolve({ "servererror": true })
});
});
return q;
}
}
Run Code Online (Sandbox Code Playgroud) 下面的代码适用于 Python 2,但不适用于 Python 3。有没有办法在 Python 3 中访问局部变量?或者这些情况的替代解决方案?
[('{name_var}_{i:02d}of{maxpg:02d}.{date_var}').format(i, **locals())
for i in range(start, end)]
Run Code Online (Sandbox Code Playgroud)
Python 3 中的错误:
关键错误:'local_var'
下面是上面的一个更简单的玩具示例(适用于 Python 2,但不适用于 3)
local_var = 'hello'
['{local_var}'.format(**locals()) for i in range(1)]
Run Code Online (Sandbox Code Playgroud)
Python 3 中的错误:
关键错误:'local_var'
Bjarne建议使用if中的条件作为范围限制.特别是这个例子.
if ( double d = fd() ) {
// d in scope here...
}
Run Code Online (Sandbox Code Playgroud)
我很好奇如何以真/假的方式解释声明.
编辑:它在6.3.2.1 C++编程语言中作为推荐.
Edit2:templatetypedefs建议指针,特别是动态强制转换,可能会让人深入了解Bjarnes的建议.
SteveJessop告诉我: - 条件不是表达式它也可以是声明,使用的值是被评估的值.
c++ if-statement type-conversion scoping variable-declaration
最小的例子
class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
# works
print({e : loadings[e] for e in loadings})
# NameError global name 'loadings' not defined
Run Code Online (Sandbox Code Playgroud)
我也尝试引用类命名空间,但这也不起作用
class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
#works
print({e : foo.loadings[e] for e in foo.loadings})
#NameError: name 'foo' is not defined
Run Code Online (Sandbox Code Playgroud)
当然,这可以按预期工作
class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
print({e : foo.loadings[e] for e in foo.loadings})
Run Code Online (Sandbox Code Playgroud)
我想了解为什么这个范围问题正在发生,如果我想做一些疯狂的事情,那么最好的方法就是这样做.我的感觉是第一个代码片段应该按原样工作,但当然不是.
目标
我正在为一些csv/json文件创建一个DataManager类/模块以及罐装数据库查询,为我的程序提供一站式服务并获取数据.有一些静态数据和一些动态数据,所以它似乎在同一个类中使用静态和非静态数据成员.虽然我理解这些可能是模块级变量,但我喜欢使用静态类数据成员的概念(可能是因为Java的偏见).任何帮助深表感谢
我的解决方案(暂时)
我最终展开了列表理解以保持在课堂范围内,在上面它会变成这样的东西
class foo:
loadings = dict(hi=1) …Run Code Online (Sandbox Code Playgroud) 我在循环中生成函数时遇到了一些JavaScript问题.
我想要这个工作的方式是一个for循环,每次迭代,生成一个名为doStuff+ 的函数i.例如,第一次迭代将生成doStuff1()第二次生成doStuff2(),依此类推等等.功能本身(为了示例)只需要打印出来i- 即doStuff1()打印1,doStuff2()打印2等.
实际发生的是i,不会"坚持"在功能中.它成为全球范围的一部分或其他东西,所以每个功能都是10.如果单击下面代码段中的第一个按钮,则可以看到此信息.
在示例二中,我尝试使用function*符号来创建适当的函数生成器.我很确定我之前已经实现了它,但我之前从未使用过这种表示法,所以我可能会离开.如果是这样的话,请告诉我.
其结果与示例2相同.
例如三,我决定尝试使用字符串而不是整数,它的工作原理!对于每次迭代,a都附加到一个字符串,所以当我按顺序运行生成的函数时,我会得到一个漂亮的小金字塔a.
由于我必须stringOut在示例3 中将变量定义在不同的范围内,所以我决定尝试使用与示例4中的数字相同的变量,并且它再次起作用!这对我来说没有多大意义,因为在更高的范围内似乎更容易遭受与例1和2相同的问题.
function*正确使用了发电机声明?function test1() {
document.getElementById("output").innerHTML = "#1 Output:";
var myFunctions = [];
for (var i = 0; i < 10; i++) {
myFunctions[i] = function() {
document.getElementById("output").innerHTML …Run Code Online (Sandbox Code Playgroud)我有一个 VueJS 和 Cesium 项目,它在帧速率下降方面存在性能问题。我知道问题出在哪里,但我不知道为什么或如何解决它。
export default {
name: "Map",
components: { ... },
data: function () {
return {
viewer: {}
}
},
methods: { ... },
mounted() {
// 150-200 FPS; but no access to the viewer object outside of this component.
let viewer = new Viewer('cesiumContainer');
// 20-30 FPS; but yields me the access I need for other components to utilize.
this.viewer = new Viewer('cesiumContainer');
... rest of my source code ...
}
Run Code Online (Sandbox Code Playgroud)
我可以将所有需要显示的内容保持在 150-200 FPS 以上,而 …
这个问题始于我试图弄清楚为什么在运行时创建的符号对EVAL.
外-EVAL.raku
#!/usr/bin/env raku
use MONKEY-SEE-NO-EVAL;
package Foobar {
our $foo = 'foo';
our sub eval {
say OUTER::;
EVAL "say $bar";
}
}
Foobar::<$bar> = 'bar';
say $Foobar::bar;
Foobar::eval;
.say for Foobar::;
Run Code Online (Sandbox Code Playgroud)
$ ./outer-EVAL.raku
===SORRY!=== Error while compiling /development/raku/VTS-Template.raku/scratchpad/./outer-EVAL.raku
Variable '$bar' is not declared
at /development/raku/VTS-Template.raku/scratchpad/./outer-EVAL.raku:10
------> EVAL "say ?$bar";
Run Code Online (Sandbox Code Playgroud)
我认为这与以这种方式创建的符号在PseudoStashs 中不可用有关。但我可能是错的。
外乐
#!/usr/bin/env raku
package Foobar {
our $foo = 'foo';
our sub outer {
say OUTER::;
}
}
Foobar::<$bar> = 'bar'; …Run Code Online (Sandbox Code Playgroud) scoping ×10
javascript ×3
python ×2
r ×2
scope ×2
angular ×1
c++ ×1
cesium ×1
csv ×1
environment ×1
eval ×1
hoisting ×1
if-statement ×1
json ×1
python-3.x ×1
raku ×1
shiny ×1
this ×1
typescript ×1
var ×1
vue.js ×1