我是Java的新手。我正在学习用Java语言吊装的概念。
根据Mozilla网站上的Javacsript教程,我碰到了这个词hoisting
。根据这些教程,JavaScript中的变量是您可以引用以后声明的变量,而不会出现异常。但是,我的问题是在哪种情况下在客户端Javascript中使用卷扬是合适的,或者为什么我们应该在Javascript中使用卷扬。有什么优点。
我是Java的新手。我正在学习用Java语言吊装的概念。
根据Mozilla网站上的Javacsript教程,我碰到了这个词hoisting
。根据这些教程,JavaScript中的变量是您可以引用以后声明的变量,而不会出现异常。但是,我的问题是在哪种情况下在客户端Javascript中使用卷扬是合适的,或者为什么我们应该在Javascript中使用卷扬。有什么优点。
Answers:
我从未听说过使用“起重”一词。如果您指的是Ben Cherry的这种提升方式:http : //www.adequatelygoodgood.com/JavaScript-Scoping-and-Hoisting.html,那么据我所知,他只是在呼应Javascript中的 Douglas Crockford :好零件,并说不要 使用吊装。他最后的断言是所有变量都应在函数的顶部声明(如Crockford和JSLint所建议的)。
或者,用ChristopherBrown先生的话来说,这并不是说的使用功能,而是与浏览器如何解释Java语言有关的怪癖。
因此,简而言之:从不和无处。
提升描述了浏览器如何解释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;
}
为避免混淆,请在函数顶部声明变量。
为什么?
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 = {};
}