JS 04 - 变数类型

大家好!

昨天我们介绍了资料的传递方式,今天就来理解变数的宣告方式吧!
我们进入今天的主题吧!


变数

JavaScript 有 varconstlet 3 种宣告方式,明天我们会再详细介绍。
今天先来理解全域变数和区域变数的差异吧!

全域变数

  • 宣告
    1. 於全域作用域使用 varlet 宣告全域变数
    2. 於任何作用域定义 window 的属性
  • 呼叫
    1. 变数於任何作用域都能被呼叫
    2. 最低的呼叫顺序
var a = [];
let b = [];

a; // []
b; // []
window.a; // []
window.b; // undefined
a === window.a; // true

a 会全等於 window.a 是因为使用 var 的宣告方式。

区域变数

  • 宣告
    1. 於区域作用域(函式)使用 var 宣告区域变数
    2. 於区块作用域(区块表示式)使用 let 宣告区块区域变数
  • 呼叫
    1. 变数只能於当前作用域被呼叫
    2. 呼叫顺序优先於全域变数
var c = Infinity;
var fn = function (bool) {
    var c = 0;
    let d = 0;
    if (!bool) {
        var c = 1;
        let d = 1;
    }
    return [c, d];
};

/* 只能呼叫全域变数 */
c; // Infinity

/* 没有定义全域变数 */
d; // Uncaught ReferenceError: d is not defined

/* 优先呼叫区域变数 */
fn(true); // [0, 0]

/* c = 1` 覆盖 c = 0
   d = 1` 只在作用域内覆盖 d = 0(区块外不影响) */
fn(false); // [1, 0]

如果作用域没有宣告区域变数,就会向外呼叫外层作用域的区域变数,都没有才会呼叫全域变数。


上方没有提到 const 是因为,const 宣告的是区块区域常数。
尽管 constlet 都有相同的特性,但是 const 更为严谨,不仅宣告时必须赋值,宣告後也不能再更改。

差不多也到尾声了。
如果对文章有任何疑问,欢迎於下方提问和建议!
我是 Felix,我们明天再见!


<<:  Day 19 - Socket 连线

>>:  Rapid Prototyping for Product Development

L2TP最不可能用於加密 VPN 连接中的数据

-VPN 访问(来源:ActForNet) VPN 是一种通过隧道连接节点的虚拟网路。L2F、PP...

Day09:09 - User服务(4) - 前端 - JWT token、修改个人资料

Hola,我是Charlie! 在Day08当中,我们完成了後端的JWT机制还有修改个人资料,在今天...

iPhone黑屏并且无法打开,如何修复?

iPhone黑屏是设备的常见问题。 案例1:“我的iPhone 7 Plus 摔倒地上後屏幕黑屏了。...

Day 5 Capsule的应用(上)

前言 由於前几天讲了capsule network,attention的笔记我还在制作,因此先来讲讲...

来做一个色码转换器吧!

前言 今天来做一个色码转换器~ 我们先认识色码之间的关系,拆解步骤後再一步步完成吧! 颜色表示的方法...