0

我看到很多这样开始的代码

var a=a||{};

现在我知道它检查是否存在。

我的问题是,如果它在代码的第一个位置,为什么要检查它?

我的意思是程序员知道 a 不存在。

4

4 回答 4

2

程序员应该知道变量是否存在。

它用于将不同的脚本片段混合在一起,而不必跟踪脚本的哪个部分首先加载。多个脚本在开始时将具有相同的代码,因此它们共享相同的变量。

对于第一个脚本,声明了变量,并且它没有先前的值,因此{}使用该值。

对于使用它的以下脚本,var由于变量已声明,因此将被忽略,并使用先前设置的变量值。

当然,在多个地方声明同一个变量会产生代码异味。最好你应该跟踪你在做什么,这样你只声明一次。

于 2012-11-19T08:57:36.260 回答
1

翻译成更清晰的代码

var a; // The variable declaration gets brought up because of hoisting

更多关于吊装的信息在这里

if( a ) {
    a = a; // if a is a truthy value then assign it to itself
} else {
    a = {}; // if a is a falsy value then set the default to an empty object
}

希望有帮助

于 2012-11-19T09:22:36.827 回答
0

这是使用默认值的捷径 - 在这种情况下为 {}。

于 2012-11-19T08:53:31.140 回答
0

基本上,javascript 可以编写在多个文件中,并且在每个文件中,您可以定义多个声明和函数。

即使程序员知道给定实例的变量是否存在,当从其他地方调用此代码时,也无法知道它是否已经存在。

这不应该发生在编写良好的代码中(全部来自一个开发人员/房子),但它确实发生在 js 代码从多个地方合并的项目中。

这个SO question对 javascript 中的变量范围有一个非常好的答案,它应该可以澄清你的疑问。

于 2012-11-19T09:02:37.427 回答