<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>What is hoisting in Javascript?</title>
<style type="text/css">
</style>
<script type="text/javascript">
var a = 1;
function b() {
alert("step 1 a = " + a);
a = 10; // step 2
alert("step 2 a = " + a);
return;
function a() {} // step 1
}
b();
alert(a);
</script>
</head>
<body>
</body>
</html>
以上代码的执行顺序是;
1、The global a is set to 1
2、b() is called
3、function a() {} is hoisted and creates a local variable a that masks the global a
4、The local a is set to 10 (overwriting the function a)
5、The global a (still 1) is alerted
function b alert order:
===》1. step 1 a = function a() {}
===》2. step 2 a = 10
===》3. 1
Java 语言没有 Hoisting 的概念,看如下代码:
public class JavaHoistingTest {
public String myvar = "my value";
public void testHoisting(){
System.out.println(myvar); //output ---> my value is different with javascript undefined. 输出的是全局的变量的值。
String myvar = "my valued"; // and this line tips : The local variable myvar is never read. 定义的变量没有使用。
}
public static void main(String[] args) {
JavaHoistingTest hoisting = new JavaHoistingTest();
hoisting.testHoisting();
}
}
输出
my value
参考资料:
http://stackoverflow.com/questions/15311158/javascript-hoisting
http://hszy00232.blog.163.com/blog/static/43022753201131315817814/
http://www.programmerinterview.com/index.php/javascript/javascript-hoisting/
http://docstore.mik.ua/orelly/webprog/jscript/ch04_03.htm
分享到:
相关推荐
JavaScript中的变量提升(Hoisting)是指在JavaScript代码执行之前,JavaScript引擎会将当前作用域(函数或全局作用域)中所有用var声明的变量提升到作用域的顶部。然而,只有声明(即变量名)会被提升,而赋值操作...
JavaScript中的变量声明提升,也称为Hoisting,是一个关键的概念,尤其对于初学者来说可能有些棘手。Hoisting是指JavaScript在代码执行前会把所有的变量声明(`var`、`let`、`const`,不过`let`和`const`的提升效果...
在JavaScript中,变量提升(Hoisting)是一种特性,它涉及到变量和函数声明在代码执行前如何被处理的过程。理解这个概念对于编写可预测且无错误的JavaScript代码至关重要。以下是关于JavaScript变量提升的一些关键...
- **变量提升(Hoisting)**:`var`声明的变量会被提升到当前作用域的顶部,这可能导致预期外的行为,而`let`和`const`则不会出现这个问题。 - **使用`window`对象**:在浏览器环境中,全局变量实质上是`window`...
JavaScript中的变量声明是编程的基础,理解这一概念对于编写健壮的代码至关重要。本文将深入探讨JavaScript中的变量声明,包括全局变量、局部变量、隐式全局变量以及“hoisting”(预解析)现象。 首先,变量根据其...
JavaScript会将变量和函数声明提升到其所在作用域的顶部。这意味着无论在哪里声明,变量和函数都能在作用域的任何地方被访问,但赋值操作不会被提升。 8. **作用域链** 当在某个作用域中尝试访问未定义的变量时,...
本文主要给大家介绍了关于JavaScript中Hoisting(变量提升与函数声明提升)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 如何将 函数声明 / 变量 “移动” 到作用域的顶部。 术语 ...
JavaScript中的变量提升(Variable Hoisting)和函数提升(Function Hoisting)是理解JS代码执行机制的关键概念。在JS中,作用域分为全局作用域和函数作用域,而在ES6引入了块级作用域(例如使用`let`和`const`声明...
以上这些知识点都是JavaScript面试中常见的主题,深入理解并能灵活运用它们,将极大地提高你在面试中的竞争力。此外,了解和实践ES6及更高版本的新特性,如箭头函数、解构赋值、类等,也是现代JavaScript开发者的...
JavaScript变量声明是编程基础中的重要一环,理解变量声明对于编写有效的JS代码至关重要。本文将深入探讨JavaScript中的变量声明方式,以及与之相关的全局变量、局部变量、隐式全局变量和“hoisting”(悬置/置顶...
在JavaScript执行环境中,代码首先会经历一个预处理阶段,这个阶段里,变量声明(`var`,`let`,`const`)和函数声明(`function`)会被提升到其所在的作用域顶部。但要注意,这只是声明被提升了,赋值操作并不会被...
- JavaScript中的`var`关键字用于声明变量,但它的作用域不是块级的,而是函数级的,导致了变量提升(hoisting)现象。在ES6中,引入了`let`和`const`来解决这个问题,它们具有块级作用域。 - `let`允许在同一作用...
变量声明提升是指使用 var 关键字声明的变量会被提升,而函数声明提升是指函数声明会被提升。 变量声明提升 在 JavaScript 中,使用 var 关键字声明的变量会被提升到执行上下文的顶部。这意味着,即使变量声明在...
JavaScript中的变量提升(Variable Hoisting)和函数提升(Function Hoisting)是理解JavaScript执行机制的关键概念,它们在JavaScript代码解析和执行过程中起着至关重要的作用。本文将详细讲解这两个概念,帮助...
在JavaScript中,变量的声明总是会被提升到当前作用域的最前端,即使变量声明在代码中的位置在使用之后。这种行为称为“变量提升”。例如: ```javascript console.log(v); // 输出:undefined var v = "hello"; ```...
1. 变量提升:变量声明通过 var 关键字提升到其作用域的顶部。 2. 函数提升:使用函数声明的函数被提升到其作用域的顶部。 函数表达式不会被提升,这是因为 JavaScript 引擎需要执行到那行代码才能识别它为函数。 ...