我们应该在何时何地使用Java吊装[关闭]


11

我是Java的新手。我正在学习用Java语言吊装的概念。
根据Mozilla网站上的Javacsript教程,我碰到了这个词hoisting。根据这些教程,JavaScript中的变量是您可以引用以后声明的变量,而不会出现异常。但是,我的问题是在哪种情况下在客户端Javascript中使用卷扬是合适的,或者为什么我们应该在Javascript中使用卷扬。有什么优点。


1
分享您的研究成果对所有人都有帮助。告诉我们您尝试过的内容以及为什么它不能满足您的需求。这表明您已花时间尝试自我帮助,这使我们免于重复显而易见的答案,并且最重要的是,它可以帮助您获得更具体和相关的答案。另请参阅“ 如何问”
2014年

6
@gnat经过所有研究,如果我理解了这个主题,为什么我会在这里发布这个问题,以正确地讨论和理解这个概念
Rudra

2
@Rudra这不是讨论论坛。此外,您还没有提供任何证据证明您已经对此进行了实际研究。
2014年

5
是的,但这不是提问的必要条件。
罗伯特·哈维

2
@Rudra:请记住,我们不是讨论论坛。 我们实际上是一个问答网站。在“问与答”格式下,此处提出的问题应在合理范围内。
罗伯特·哈维

Answers:


11

我从未听说过使用“起重”一词。如果您指的是Ben Cherry的这种提升方式:http : //www.adequatelygoodgood.com/JavaScript-Scoping-and-Hoisting.html,那么据我所知,他只是在呼应Javascript中的 Douglas Crockford :好零件,并说不要 使用吊装。他最后的断言是所有变量都应在函数的顶部声明(如Crockford和JSLint所建议的)。

或者,用ChristopherBrown先生的话来说,这并不是说的使用功能,而是与浏览器如何解释Java语言有关的怪癖。

因此,简而言之:从不无处


1
那么,为什么要包含这个概念,这个功能又是什么呢?
Rudra

@Rudra:David链接的文章中的副主题“声明,名称和吊装”似乎很好地涵盖了这一点。哪一部分不清楚?
罗伯特·哈维

@RobertHarvey我只想知道,他们在何时何地使用它。大卫说永远不会在任何地方使用它,但是为什么将它显示为功能
Rudra

4
仅因为某项功能是功能并不意味着它是一个好主意。“功能”失宠的原因有很多。即使您的阑尾也没有明显有用的目的,即使它可能在穴居人时代也确实有用。
罗伯特·哈维

1
吊装是编译器理论中的一个术语,尤其是优化。它已经存在了至少20年,但是由于Java语言的这种特殊性而流行起来。如果不将其称为功能,则可能是一个错误。
david.pfx 2014年

16

提升描述了浏览器如何解释Javascript的功能,而并不是要使用的功能。

解释Javascript时,浏览器会在函数的开头作用域函数级变量。例:

function AddTwoAndTwo() {
    var two = 2;
    var result = two + two;
    return result;
}

在发布的代码中,变量“ two”和“ result”都存在于函数作用域的开头(显然,它们是在此处声明的。)但是,由于浏览器正在“吊起”变量,因此以下内容成为合法的Javascript代码。

function AddTwoAndTwo() {
    result = 5;
    alert(result);
    var two = 2;
    var result = two + two;
    return result;
}

最终的结果是,在声明变量之前先要使用变量,这可能会引起混淆,尤其是对于全局范围的变量。例:

var result = 6;

function AddTwoAndTwo() {
    alert(result);  // should this be 6 or undefined?
    var two = 2;
    var result = two + two;
    return result;
}

为避免混淆,请在函数顶部声明变量。


4
+1:这就是我的回答。它不是使用或不使用的功能,仅是要考虑的环境属性。
scrwtp 2014年

1

为什么?

JavaScript没有Block Scope,它应该可以解释为什么事情要升到顶端。

它有用吗?

如果您喜欢这个:

var someVariable = someVariable || {};

代替这个:

if ( "undefined" !== typeof someVariable ) {
    someVariable = someVariable;
} else {
    someVariable = {};
}

这很有用。即使您没有注意到它!

澄清度

第一个示例将转换为以下内容:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.