JavaScript 变量的声明

🌙
手机阅读
本文目录结构

变量通过 var 来声明;

下面是要避免的,否则写代码的时候可能会把自己给坑了;

  • 重复声明;

  • 不声明直接赋值

  • 不要更改变量的类型,开始是值类型,后面就不要改为数值或别的别的了,开始如果用来储存某个属性值,就不要再用在别的属性上了;

    推荐:先声明,后定义;

  • 需要读写的变量,读写前,一定要声明;

  • 需要运算的变量,运算前,一定要赋值;

  • 书写的时候,推荐把变量名放在页面的上面(上部分)去声明 + 定义;这样不仅可以放心大胆的用,而且可以方便查找变量;

  • 在任何情况下声明变量都要先声明;在使用一个变量之前应当先声明,变量是使用关键字 var/let/const 来声明的 (const 声明和定义必须一起做);

    var a=1;
    function test(){
      var b=c=2;//这时候会隐式声明全局变量;
    }
    test();
    console.log(a,c)
    

上面是非常不好的写法;不要写 var b=c=2 这种声明;上面代码中 c 就会被隐式声明为全局变量;

下面这种写法是可以的

var a= 1,c;
function test(){
  var b=c=2;
}
test();
console.log(a,c)

因为开始 c 已经声明了,后面只是给 c 赋值;

多个变量声明赋值时候,同一类的变量推荐下面这种写法;

var name="anbang",
    age=26,
    height="174cm";

这样既可以简洁,又保证可读性;

注意:任何变量赋值前都需要声明变量,不要隐式创建全局变量;

重复声明和遗漏声明的区别:

在 javascript 里使用 var 重复声明是合法而且不会有任何事情的,如果重复声明带有初始化的值,那么就和一条简单的赋值语句没有什么两样,但是如果你忘记声明了,试图读取一个没有声明的变量的值,javascript 可能会报错;

在严格模式中,给一个没有声明的变量赋值也是会报错的;非严格模式下虽然不会报错,但是不要抱着侥幸的心理;这是一个不好的习惯,建议始终使用 var 来声明变量;

ES6 扩展了 2 种声明方法;

  • let
    • 声明一个块作用域的局部变量,可以选择将其初始化为一个值
  • const
    • 声明一个只读的常量

使用关键词 var。例如 var x = 42。这个语法可以用来声明局部变量和全局变量。

使用关键词 let。例如 let y = 13。这个语法可以用来声明块作用域的局部变量;ES6 中更推荐用这个来声明变量;

用 var 或 let 声明的且未赋初值的变量,值会被设定为 undefined;undefined 值在布尔类型环境中会被当作 false。所以程序中,利用数据的 true 和 false 判断逻辑也是常见的;

常量不可以通过赋值改变其值,也不可以在脚本运行时重新声明。它必须被初始化为某个值。

const myName="zhu";
let age=2;
age =22;
// myName=4;//Error
console.log(age);

const 定义和声明必须一起

const 是声明定义一个常量,后续就不可以修改了,所以不能先声明后定义,必须一起做

//错误的
const a;//Uncaught SyntaxError: Missing initializer in const declaration
a = 10;

//正确的
const a = 123

常量的作用域规则与 let 块级作用域变量相同。若省略 const 关键字,则该标识符将被视为变量。

if(true){
    var a=2;
}
if(true){
    let b=3;
}
console.log(a);
console.log(b);//b is not defined

在同一作用域中,不能使用与变量名或函数名相同的名字来命名常量。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了