深入了解用var声明变量

作者: 前端精髓 | 来源:发表于2017-06-23 23:49 被阅读53次

ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用 var 操作符(注意 var 是一个关键字),后跟变量名(即一个标识符),如下所示:

var message;

这行代码定义了一个名为 message 的变量,该变量可以用来保存任何值(像这样未经过初始化的变量,会保存一个特殊的值—— undefined )。ECMAScript 也支持直接初始化变量,因此在定义变量的同时就可以设置变量的值,如下所示:

var message = “hi”;

在此,变量 message 中保存了一个字符串值 “hi” 。像这样初始化变量并不会把它标记为字符串类型;初始化的过程就是给变量赋一个值那么简单。因此,可以在修改变量值的同时修改值的类型,如下所示:

var message = “hi”;
message = 100; // 有效,但不推荐

在这个例子中,变量 message 一开始保存了一个字符串值 “hi” ,然后该值又被一个数字值 100 取代。虽然我们不建议修改变量所保存值的类型,但这种操作在ECMAScript 中完全有效。

有一点必须注意,即使用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用 var 定义一个变量,那么这个变量在函数退出后就会被销毁,例如:

function test(){
var message = “hi”; // 局部变量
}
test();
alert(message); // 错误!

这里,变量 message 是在函数中使用 var 定义的。当函数被调用时,就会创建该变量并为其赋值。而在此之后,这个变量又会立即被销毁,因此例子中的下一行代码就会导致错误。不过,可以像下面这样省略 var 操作符,从而创建一个全局变量:

function test(){
message = “hi”; // 全局变量
}
test();
alert(message); // “hi”

这个例子省略了 var 操作符,因而 message 就成了全局变量。这样,只要调用过一次test() 函数,这个变量就有了定义,就可以在函数外部的任何地方被访问到。

提示

虽然省略 var 操作符可以定义全局变量,但这也不是我们推荐的做法。因为在局部作用域中定义的全局变量很难维护,而且如果有意地忽略了 var 操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出 ReferenceError 错误。

ES6中新增了let声明变量


ES6中新增了const声明变量

相关文章

  • 深入了解用var声明变量

    ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用...

  • Javascript学习笔记——5.3 声明语句

    var 声明变量; function 声明函数。 var 在函数体内用var声明变量,则变量为局部变量;在顶层代码...

  • swift从零开始-02-基础部分

    类型 常量和变量 用 let 声明常量, 用 var 声明变量let apples = 3var currentT...

  • JavaScript基础学习(八)-变量的声明

    var let const声明变量 var 变量foo用var声明,会发生变量提升,即脚本开始运行时,变量foo已...

  • swift

    用let来声明常量 let radiuds = 10; 用var来声明变量 var age = 20 var x ...

  • 专题复习三、JS基础还记得么?

    写于2017.07.29 js声明变量方法 var a =1表示声明一个变量。用var声明的变量都存在声明提升,意...

  • JavaScript基础

    全局变量和局部变量 方法内部用var声明的变量是局部变量,方法外部用var声明或者方法内部不加var的都是全局变量...

  • 声明前置

    变量的声明前置 用var创建变量,声明会前置 如果上面没用 var 声明变量,直接使用就是会报错 函数的声明前置 ...

  • var 与let

    1.声明提升 使用var 声明变量,声明会提升到顶部 使用let 声明变量不会提前 在函数内部用var声明变量,只...

  • 不使用var定义的变量

    js变量 JavaScript声明变量可以用var声明,也可以不用var声明,两种声明变量的方式有什么区别呢? 注...

网友评论

    本文标题:深入了解用var声明变量

    本文链接:https://www.haomeiwen.com/subject/hzyhcxtx.html