把MDN读薄-基础:变量

基础

Javascript中的变量是大小写敏感的。

一个 JavaScript 标识符必须以字母、下划线(_)或者美元符号($)开头;后续的字符也可以是数字(0-9)。 因为 JavaScript 语言是区分大小写的,所以字母可以是从“A”到“Z”的大写字母和从“a”到“z”的小写字母。

声明

声明变量

  • var:声明一个局部或全局变量,可选初始值;可以变量提升。
  • let:声明一个块作用域的局部变量,可选初始值;不能变量提升。
  • const:声明一个块作用域的只读常量,必初始值。

变量求值

// 直接代码说明

// 取值
var a;
console.log(a);  // undefined
console.log(b);  // undefined,存在变量提升
var b;

console.log(c);  // 未捕获的引用错误: c 未被定义

let x;
console.log(x);  // undefined
console.log(y);  // 未捕获的引用错误: c 未被定义, let声明的变量不会被提升
let y;

// 隐式转换
// undefined和null在布尔类型环境中都会转换为false
var isLogin;
if (isLogin) {
    // do something...
}
// 在数值环境中,undefined被转为NaN,null被转为0
var num;
console.log(num - 0);  // NaN
var num2 = null;
console.log(num2 - 0); // 0
复制代码

变量作用域

在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问。在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问。

ECMAScript 6 之前的 JavaScript 没有 语句块 作用域

if (true) {
  var x = 5;
}
console.log(x); // 5

if (true) {
  let x = 5;
}
console.log(x); // ReferenceError: y 没有被声明
复制代码

变量提升

JavaScript中可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升。

JavaScript 变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined 值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined 值。

console.log(x === undefined); // true
var x = 3;
复制代码

由于存在变量提升,一个函数中所有的var语句应尽可能地放在接近函数顶部的地方。

在 ECMAScript 6 中,let(const)将不会提升变量到代码块的顶部。因此,在变量声明之前引用这个变量,将抛出引用错误(ReferenceError)。

函数提升

对于函数来说,只有函数声明会被提升到顶部,而函数表达式不会被提升。

/* 函数声明 */

foo(); // "bar"

function foo() {
  console.log("bar");
}


/* 函数表达式 */

baz(); // 类型错误:baz 不是一个函数

var baz = function() {
  console.log("bar2");
};
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值