浅淡JavaScript中的变量提升
2017-10-28 12:40
218 查看
今天我给大家分享JavaScript中的变量提升,这是java中变有的概念,在这里我将会结合java作一个简单的比较。
请看下面JavaScript的代码:
大家可以看到上面的代码中,变量b在打印语的后面输出了,却没有报错。这是为什么呢?相信有点java基础的很难相信不会报错,当初我学习的时候也是这样的。下面我解释一下,这是为什么?原因是在JavaScript编译的时候会把<script></script>中的所有变量都提升上来,然后赋值为undefined。然后依然向下执行script语句,直到遇到赋值语句时才会把值赋给变量。从上面的代码可以看到,变量a在打印前初始化了,而变量b在打印后初始化,这才导致结果和想象中的不一样,所以我在里强调大家一句,在写js代码时一定要把所有变量都定义在开头。
下面再下看一段简单的java代码:
上面的java代码连编译都通不过,报错说,变量b没有定义。这也就是JavaScript和Java的不同之处。
请看下面JavaScript的代码:
<script type="text/javascript"> var a = 11; document.write(a); //11 document.write(b); //undefined var b = 111; </script>
大家可以看到上面的代码中,变量b在打印语的后面输出了,却没有报错。这是为什么呢?相信有点java基础的很难相信不会报错,当初我学习的时候也是这样的。下面我解释一下,这是为什么?原因是在JavaScript编译的时候会把<script></script>中的所有变量都提升上来,然后赋值为undefined。然后依然向下执行script语句,直到遇到赋值语句时才会把值赋给变量。从上面的代码可以看到,变量a在打印前初始化了,而变量b在打印后初始化,这才导致结果和想象中的不一样,所以我在里强调大家一句,在写js代码时一定要把所有变量都定义在开头。
下面再下看一段简单的java代码:
public class Test { public static void main(String[] args){ int a = 11; System.out.println(a); // System.out.println(b); //b cannot be resolved to a variable int b = 111; } }
上面的java代码连编译都通不过,报错说,变量b没有定义。这也就是JavaScript和Java的不同之处。
相关文章推荐
- javascript中的变量作用域以及变量提升详细介绍
- JavaScript系列文章:变量提升和函数提升
- Javascript作用域和变量提升
- javascript的变量声明和函数声明提升
- JavaScript 变量提升 作用域
- JavaScript的那些坑之变量提升
- JavaScript难点——变量提升和函数提升(二)
- JavaScript 变量声明提升
- javascript 的变量提升特性
- JavaScript变量提升-Hoisting
- JavaScript 笔记(2) -- 类型转换 & 正则表达 & 变量提升 & 表单验证
- 【JavaScript】变量提升以及var对变量提升的
- 【JavaScript学习笔记】7:函数提升,变量提升,异常抛掷和捕获,ES6的Map和Set
- JavaScript 函数总体概述(函数声明/参数传递/返回值/加载/变量和作用域/变量声明提升/匿名函数/回调函数)
- Javascript变量提升的问题
- javascript变量提升
- javascript的变量声明和函数声明提升
- JavaScript中变量提升 Hoisting
- javascript中的变量提升和函数提升详解
- [javascript高手之路]最通俗易懂的javascript变量提升