考虑以下代码:
var factory = function(someCondition) {
var para1 = 'some value';
if(someCondition)
var para2 = 'some other value';
return new MyClass(para1, para2);
}我知道这段代码是perfectly legal,尽管para2在if内部声明,但在外部使用。
我的问题是:这是不是被主流的Javascript风格指南认为是不好的风格?如果是这样的话,建议的替代方案是什么?
我只想说清楚:我知道提升和变量不是块作用域,而是函数作用域的事实。
发布于 2014-08-30 16:24:34
从技术上讲,变量是“提升的”,代码将像这样执行:
var para1 = 'some value';
var para2;
if(someCondition)
para2 = 'some other value';在执行代码之前,作用域中的所有var声明都声明此作用域中的变量。因此,它在实践中并没有太大的不同。然而,我认为像上面那样显式地编写代码是一种很好的风格,以使作用域中存在哪些变量变得显而易见。在条件中“隐藏”变量声明可能会导致混淆。
发布于 2014-08-30 16:14:58
这不应该是一个糟糕的风格,这可能会让人有点困惑。
由于提升了,javascript会像bellow一样工作,所以最好也像bellow那样写。
var factory = function(someCondition) {
var para1 = 'some value';
var para2; //declare it here
if(someCondition)
para2 = 'some other value'; //assign the value here
return new MyClass(para1, para2);
}引入了新关键字的ES6版本让提供了变量块作用域。
发布于 2014-08-30 16:30:02
JavaScript‘提升’的一个例子:
var para2 = "my value";
var factory = function(someCondition) {
var para1 = 'some value';
console.log(para2);
if(someCondition)
var para2 = 'some other value';
return new MyClass(para1, para2);
}
factory(true); // undefined上面的代码将记录“未定义”。
https://stackoverflow.com/questions/25580407
复制相似问题