JavaScript变量

命名规范

  • 区分大小写, ECMAScript里面的一切,都区分大小写。

  • 标识符,即变量、函数、属性的名字或者函数的参数,需要遵守如下规则:

      - 字母、下划线、美元符号$ 开头
      - 其他字符可以是字母、下划线、美元符号或者数字
      - 采用小驼峰格式(第一个字母小写,之后每个单词首字母大写)
      - 构造函数或者class类需要采用大驼峰
      - 不能把关键字、保留字、true、null作为标识符
    

变量

在js程序执行之前,首先检查语法问题,没有问题就预编译。
在预编译过程中,存在变量提升,会将var function 声明的提升,function 会将函数体提升。
在ES6中, 使用let 声明的,禁止重复声明,有变量提升,但是在初始化之前禁止访问,产生暂时性死区(TDZ Temporal Dead Zone)。
在ES6之前,重复命名变量只会覆盖之前命名的变量。在ES6,重复声明变量会报错。
在严格模式中,声明变量必须使用var/let/const。

删除全局变量
在delete a 后,访问a会报错. Uncaught ReferenceError: a is not defined。表明全局的a已经被删除了

var a = 1;
console.log(a);
console.log(window.a);

delete a;
console.log(window.a);
console.log(a);

这个时候输出的都是a
但是如果我们使用严格模式:
在这里插入图片描述
可见,在严格模式下不允许删除 全局变量。

let、const

在ES6中,有了块级作用域的概念。使用let、const会创建块级变量。

let

  1. 在同一作用域下不允许重复声明。
function test(a) {
  let a = 10; // 此处报错
  console.log(a);
}
test();//报错 SyntaxError: Identifier 'a' has already been declared

这里是函数预编译过程中存在形参,在函数执行是 会将实参的值赋值给实参。这里是

let a ; =>
a = undefined; =>
let a = 10; 约函数执行前一刻预编译声明的a 冲突了,报错显示 a 已经声明了。

那将 let a = 10; 使用大括号包裹呢?

  {
    let a = 10; //10
  }
  console.log(a);//undefined
}

test1();

大括号里面的a 在一个块级作用域里面,所以这个变量a 的声明与函数执行的a无关,a的值也就是undefined。

  1. let 不会提升,会产生暂时性死区
function test() {
  console.log(a);//ReferenceError
  let a = 10;
}
test();

ReferenceError: Cannot access ‘a’ before initialization, 变量 a 不能在初始化之前访问,也就是 let a = 10之前使用变量a;
这里还需要注意的是 在 let a = 10 之前使用 typeof a 也会报同样的错误,这表示typeof也不在安全。

function test(x = y, y = 2){
  console.log(x, y);
}
test(1, 1);
test(1);
test();

1 1
1 2
ReferenceError: Cannot access ‘y’ before initialization

函数执行的时候传入了参数x,函数执行的时候就不会执行 x = y ,但是没有传,就会执行语句 x = y ,但是实际上 y 是在 这条语句之后 声明的。这里也会报错

  1. let 声明的变量只能在当前作用域下生效。
{
  let a = 1;
}
console.log(typeof a);
console.log(a);

undefined
ReferenceError: a is not defined

在块级作用域外部是无法访问a 的。

不建议在块级作用域内,采用函数声明方式声明函数,建议使用函数表达式

function a() {} // 函数声明
const a = function (){} // 函数表达式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值