javascript变量声明前置

变量声明前置:

所谓的变量声明前置就是在一个作用域块中,所有的变量都被放在块的开始出声明,下面举个例子你就能明白了

1 var a = 1;
2 function main() {
3     console.log(a);//1
4 }
5 main();//输出1

上面代码输出的是外层变量a的值

1 var a = 1;
2 function main() {
3     console.log(a);
4     var a = 2;
5 }
6 main()//输出undefined

问什么这样就输出undefined呢?是因为脚本在执行的时候会自动将变量声明前置,解析成如下:

1 var a = 1;
2 function main() {
3     var a;
4     console.log(a);
5     a = 2;
6 }

所以输出的是undefined。

小结:

  针对上述问题,我们在写javascript脚本时应该尽量将变量声明放在作用域的开始地方,这样就会避免上述问题了。

  有时候我们在开发时会遇到莫名其妙的问题,其实有些是我们并没有理解javascript的执行原理导致的,只有弄懂了,我们才能减少这样的错误,希望本文能够帮助你!

时间: 2024-10-13 09:35:31

javascript变量声明前置的相关文章

JavaScript 变量声明提升

JavaScript 变量声明提升 一.变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动 二.在基本的语句(或者说代码块)中(比如:if语句.for语句.while语句.switch语句.for...in语句等),不存在变量声明提升 三.函数声明会提升,但是函数表达式的函数体就不会提升 1 fun(); // hello 2 function fun(){ 3 console.log("hello"); 4 } 5 // -------------- 6 //

Javascript变量声明

Javascript变量声明 JavaScript中即可以使用双引号声明字符串,也可以使用单引号声明字符串.主要是为了方便和html集成,避免转义符的麻烦. JavaScript是动态类型,因此 var i=10;i='test'是合法的. var m,n,x,y=10;也是合法 判断变量是否可用 Javascript中,要用到一个变量计算的时候,首先要判断变量不是undefined也不是null 有两种判断方法,但是有区别,推荐第二种. 第一种: <script type="text/j

javascript变量声明提升

javascript变量声明提升(hoisting) javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看一段代码 1 2 3 4 5 var v = "hello"; (function(){   console.log(v);   var v = "world"; })(); 这段代码运行的结果是什么呢?答案是:undefined这段代码说明了两个问题,第一,funct

【转】javascript变量声明 及作用域

javascript变量声明提升(hoisting) javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看一段代码 1 2 3 4 5 var v = "hello"; (function(){   console.log(v);   var v = "world"; })(); 这段代码运行的结果是什么呢?答案是:undefined这段代码说明了两个问题,第一,funct

javascript变量声明 及作用域

javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看一段代码 1 2 3 4 5 var v = "hello"; (function(){   console.log(v);   var v = &qu

JavaScript变量声明那些事儿

声明和初始化不一样 声明 var joe; // the declaration 初始化 joe = 'plumber'; // the initialization 声明前置 你可以在函数的任何位置通过var声明变量,它们会像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(前置/置顶解析/预解析).当你使用了一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误.看下面这个例子: var myname = "global"; (function() { alert

javascript变量声明和作用域提升

以前的知识总是忘,遇到代码又看不懂.要再复习一下,顺便记录一下. 1 add(1,2); 2 function add(a,b){ 3 alert(a+b); 4 } 代码能输出3,为什么不是按顺序执行?应该是  //add is not defined ... javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 也就是说,function add(a,b){alert(a+b)}是一个函数声明,告诉我们有

javascript变量声明提升(hoisting)

javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看一段代码 1 2 3 4 5 var v = "hello"; (function(){   console.log(v);   var v = "world"; })(); 这段代码运行的结果是什么呢? 答案是:undefined 这段代码说明了两个问题, 第一,function作用域里的变量v遮盖了上层作用域变量v.代

javascript变量声明的一点感想

相对于C/C++来说,ECMAScript里的for循环并不能创建一个局部的上下文. for (var k in {a: 1, b: 2}) { alert(k); } alert(k); // 尽管循环已经结束但变量k依然在当前作用域 任何时候,变量只能通过使用var关键字才能声明. 上面的赋值语句: a = 10; 这仅仅是给全局对象创建了一个新属性(但它不是变量).“不是变量”并不是说它不能被改变,而是指它不符合ECMAScript规范中的变量概念,所以它“不是变量”(它之所以能成为全局对