关于JavaScript变量声明及其初始化的问题
来源:互联网 发布:进销存数据分析 编辑:程序博客网 时间:2024/06/01 07:18
我们知道,js变量应通过var来定义,例如:
var a;
这种定义方式只定义了变量名,但没给初值。不过,js在编译时会自动赋予undefined初值。如果要给明确的初值可这样定义:
var a = 123;
请看下面的代码:
alert(a);var a = 123;
上面的代码在var之前就用到了变量。一般我们认为这样的程序会报错,可是实际运行后我们发现程序并未报错,而是alert输出了undefined(undefined也是个值)。这是为什么呢?
在回答这个问题之前,再看下面的代码:
alert(a);a = 123;
这段代码与上一段代码的区别在于去掉了var关键字。可是运行后我们发现程序报错了。这又是为什么呢?
为回答这个问题,我们就必须了解js的一些内部机制。这篇教程说得非常细致。
首先,我们知道js里除了对象什么也没有。那么上面的变量a又是什么呢?其实,在<script>...</script>标签下(不在函数里)直接写的var我们称之为顶层变量,不过严格说来顶层变量不应该称为变量,而是window对象的一个属性。window对象在浏览器解析<script>...</script>标签时会自动先查找出通过var定义的变量,然后马上作为window的一个属性,并初始化为undefined。并且,即使如果我们在var定义时给了初值,window的这个新属性仍然被初始化为undefined。
回过头来看看前面的代码:
alert(a);var a = 123;
这段代码被解析后相当于这样:
var a;alert(a);a = 123;
因此我们看出,alert输出为undefined了。
再看看前面的另一段代码:
alert(a);a = 123;
这段代码被解析时并未发现有var关键字,因此执行到alert(a)时,就等于执行alert(window.a),而window对象尚没有a属性,当然就报错了。
再次强调,请仔细阅读这篇教程,您一定收获不小。同时也请您把前后各章节都仔细阅读,相信对您提高js有相当大的帮助。
教程:http://javascript.info/tutorial/initialization
转载地址:http://www.cnblogs.com/yang-wu/archive/2012/10/31/2748944.html
- 关于JavaScript变量声明及其初始化的问题
- 关于JavaScript变量声明及其初始化的问题
- 关于Javascript循环体变量声明与初始化的效率问题
- 关于javascript变量声明、函数声明提升的问题
- javascript 变量的声明与初始化
- javaScript变量的声明及初始化
- java中关于static 类型的变量声明与初始化的问题
- 关于C++声明和初始化的问题
- javascript的变量及其作用域和提前声明
- JavaScript函数声明、变量声明及赋值的优先级问题
- JavaScript变量的声明
- 关于声明指针初始化问题
- 关于java变量的初始化问题
- JS变量重复声明以及忽略var 声明的问题及其背后的原理
- javascript的变量的声明
- JavaScript变量声明的陷阱
- 关于静态变量初始化问题
- 变量的定义,初始化和声明
- mycat中间件(一)描述
- MySQL 5.7 Use The JSON Data Type(MySQL 使用 JSON 数据类型)
- c# socket 、TCPClient、TCPListener 用法详解
- 树莓派---GPIO应用详解
- .net中SQLCommand的详细用法
- 关于JavaScript变量声明及其初始化的问题
- js 根据输入具体时间倒计时(底部有简化版)
- Andriod CTS测试环境搭建
- 04-ubuntu14 su 模块未知
- 统一资源定位符URL
- App开放接口api安全性—Token签名sign的设计与实现
- 病毒分析。
- ReentrantReadWriteLock读写锁的使用
- APP流畅度优化策略