.. _js_basic: ==================== JavaScript基础知识 ==================== .. note:: 本文知识不足一哂,仅仅是我学习过程笔记(以加强记忆) 注释 ======= JavaScript注释方法有2种: - 单行注释 ``//`` - 多行注释 ``/* */`` 大小写 ========== ECMAScript (即JavaScript) 中的一切都区分大小写。也就是不论变量、函数名还是操作符,都区分大小写。 标识符 ====== - 标识符,即 变量、函数、属性或函数参数。 - 标识符由一个或多个字符组成,首字母必须是字母、下划线( ``_`` )或美元符号( ``$`` );其他字符则可以包含数字 ( **不能使用减号** ``-`` ,这点和 :ref:`shell` 不同,切记) - 推荐采用驼峰命名方法,即 **第一个单词首字母小写,后面每个单词的首字母大写** (虽然不是强制,但是是 **最佳实践** ,我个人觉得也许可以在Shell中也使用类似命名方法) - 和所有语言一样,关键字、保留字、 ``true`` 、 ``false`` 和 ``null`` 不能作为标识符 语句 ======= - ECMAScript 的语句以 **分号** ( ``;`` )结尾(同 :ref:`clang` ) - 多条语句可以合并到一个C语言风格的代码块中: .. literalinclude:: js_basic/js_multi_lines.js :language: javascript :caption: JavaScript使用C语言风格代码块 变量 ======= ECMAScript的变量是 **松散类型** ,也就是变量可以保存任何类型的数据。 有3个关键字可以声明变量: - ``var`` : 函数作用域有效 - ``const`` - ``let`` : 代码块作用域有效(也就是 ``let`` 作用域更小,类似在 ``if ... {...}`` 这样的代码块中有效) - 定义多个变量的方法: .. literalinclude:: js_basic/js_multi_var.js :language: javascript :caption: 定义多个变量 变量作用域 ------------ - **使用var操作符定义的变量会成为包含它的函数的局部变量** : 也就是说,如果在一个函数内部使用 ``var`` 定义一个变量。则这个变量在函数退出时被销毁。 - 如果在函数内部省略 ``var`` 操作符,则创建的变量是 **全局变量** .. warning:: 在局部作用域定义全局变量会导致程序很难维护。在严格模式下,如果给未声明的变量赋值,会导致抛出 ``ReferenceError`` - 函数作用域内部通过 ``var`` 定义变量,则这个变量定义语句在作用域内部任何位置都是一样的,ECMAScript会自动将所有变量定义语句都拉到函数作用域的顶部;并且多次使用 ``var`` 声明同一个变量也没有问题(最后一个生效) - ``let`` 定义的变量只在代码块部分有效,而且不会自动提升到代码块顶部;也就是说如果 ``let`` 定义变量的语句在使用这个变量的语句之后,就会触发 ``ReferenceError`` - 合理使用 ``let`` 申明块变量可以 **避免循环定义的迭代变量渗透到循环体外部** : .. literalinclude:: js_basic/let_var.js :language: javascript :caption: 在循环体内部使用 ``let`` 定义变量,避免变量泄漏