首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在if中声明变量并在外部使用

在if中声明变量并在外部使用
EN

Stack Overflow用户
提问于 2014-08-30 16:13:31
回答 5查看 149关注 0票数 4

考虑以下代码:

代码语言:javascript
复制
var factory = function(someCondition) {
    var para1 = 'some value';
    if(someCondition)
        var para2 = 'some other value';

    return new MyClass(para1, para2);
}

我知道这段代码是perfectly legal,尽管para2if内部声明,但在外部使用。

我的问题是:这是不是被主流的Javascript风格指南认为是不好的风格?如果是这样的话,建议的替代方案是什么?

我只想说清楚:我知道提升和变量不是块作用域,而是函数作用域的事实。

EN

回答 5

Stack Overflow用户

发布于 2014-08-30 16:24:34

从技术上讲,变量是“提升的”,代码将像这样执行:

代码语言:javascript
复制
var para1 = 'some value';
var para2;
if(someCondition)
    para2 = 'some other value';

在执行代码之前,作用域中的所有var声明都声明此作用域中的变量。因此,它在实践中并没有太大的不同。然而,我认为像上面那样显式地编写代码是一种很好的风格,以使作用域中存在哪些变量变得显而易见。在条件中“隐藏”变量声明可能会导致混淆。

票数 5
EN

Stack Overflow用户

发布于 2014-08-30 16:14:58

这不应该是一个糟糕的风格,这可能会让人有点困惑。

由于提升了,javascript会像bellow一样工作,所以最好也像bellow那样写。

代码语言:javascript
复制
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版本让提供了变量块作用域。

票数 3
EN

Stack Overflow用户

发布于 2014-08-30 16:30:02

JavaScript‘提升’的一个例子:

代码语言: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

上面的代码将记录“未定义”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25580407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档