zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计学习笔记(1)

    1.变量

    ECMAScript变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一 个用于保存任意值的命名占位符。
    JavaScript有 3 个关键字可以声明变量:var、const 和 let。其中,var 在 ECMAScript 的所有版本中都可以使用,而 const 和 let 只能在 ECMAScript 6 及更晚的版本中使用

    1.1 var 关键字

    要定义变量,可以使用 var 操作符(注意 var 是一个关键字),后跟变量名。
    var message; // 还未初始化会保存一个undefined的特殊值,
    上述代码定义了一个message的变量,可以保存任何类型的值,并且还没有初始化。let 初始化保存的变量,不仅可以改变保存的值,也可以改变值的类型。

    1.1.1 var 的作用域

    使用 var 操作符定义的变量会成为包含它的函数的局部变量。例如,使用 var在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁。
    function test() { 
    var message = "hi";  // 局部变量 
    } 
    test();
    console.log(message); // 出错!

    1.1.2 var声明提升

    “提升”(hoist),也就是把所有变量声明都拉到函数作用域的顶部

    1.2 let 声明

    let 声明的范围是块作用域, 而 var 声明的范围是函数作用域。
    块作用域 是函数作用域的子集,因此适用于 var 的作用域限制同样也适用于 let。
    let 也不允许同一个块作用域中出现冗余声明。
    var name; 
    let name; // SyntaxError 
    let age;
    var age; // SyntaxError

    1.2.1 暂时性死区

    let 与 var 的另一个重要的区别,就是 let 声明的变量不会在作用域中被提升。
     name // 会被提升 
    console.log(name); // undefined 
    var name = 'Matt'; // age 不会被提升 
    console.log(age); // ReferenceError:age 没有定义
    let age = 26;
    在解析代码时,JavaScript 引擎也会注意出现在块后面的 let 声明,只不过在此之前不能以任何方 式来引用未声明的变量。在 let 声明之前的执行瞬间被称为“暂时性死区”(temporal dead zone),在此 阶段引用任何后面才声明的变量都会抛出 ReferenceError。

    1.2.2 全局声明

    与 var 关键字不同,使用 let 在全局作用域中声明的变量不会成为 window 对象的属性(var 声 明的变量则会)。
    var name = 'Matt'; 
    console.log(window.name); // 'Matt' 
    let age = 26; 
    console.log(window.age); // undefined
    不过,let 声明仍然是在全局作用域中发生的,相应变量会在页面的生命周期内存续。因此,为了 避免 SyntaxError,必须确保页面不会重复声明同一个变量。

    1.3 const 声明

    const 的行为与 let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且 尝试修改 const 声明的变量会导致运行时错误。
    const 也不允许重复声明。
    const 声明的作用域也是块。

    1.4 let, const, var 的区别

    let 声明的范围是块作用域,而 var 声明的范围是函数作用域
    let和const,var 的区别:
       (1)块级作用域不一样:
    块级作用域有{ }包括,let和const 是有块级作用域,var不存在块级作用域
    (2)变量提升:(函数及变量的声明都将被提升到函数的最顶部)
    var 存在变量提升,let和const不存在变量提升,即变量只能在声明之后使用,否则会报错
    (3)重复声明:var声明变量时可以重复声明,后声明的同名变量会覆盖之前声明的变量。
    let和const不能重复声明
    (4)暂时性死区:在使用let和const命令声明之前该变量都是不可用的,这称为暂时性死区。使用var声明不存在暂时性死区。
    (5)初始值设置:用let和var声明变量时可以不设置初始值,使用const声明变量时必须设置初始值,不然会报错
    (6)指针指向:let创建的变量是可以更改指针的指向的(可以重新赋值)。但const声明的变量是不允许改变指针的指向
     
    区别
    是否有块级作用域
    是否存在变量提升
    是否添加全局属性
    能否重复声明变量
    是否存在暂时性死区
    是否必须设置初始值
    能否改变指针指向
    var
    ×
    ✔️
    ✔️
    ✔️
    ×
    ×
    ✔️
    let
    ✔️
    ×
    ×
    ×
    ✔️
    ×
    ✔️
    const
    ✔️
    ×
    ×
    ×
    ✔️
    ✔️
    ×

    使用:

    变量命名推荐顺序: const > let > var
    行为怪异的 var 所造成的各种问题
    - 限制自己只使用 let 和 const 有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值
  • 相关阅读:
    【Linux高频命令专题(24)】grep
    【PSR规范专题(6)】PSR-7 HTTP消息接口【转】
    【redis专题(10)】KEY设计原则与技巧
    【redis专题(9)】事务
    【redis专题(8)】命令语法介绍之通用KEY
    linux 之 jq
    PHP Rabbitmq 报错Broken pipe
    Laravel 跨框架队列交互
    解决Linux下编译.sh文件报错 unexpected operator Syntax error: word unexpected
    安装QConf 报错及解决方案
  • 原文地址:https://www.cnblogs.com/taxpolat/p/15029382.html
Copyright © 2011-2022 走看看