权文哲_20200118-权文哲

知识点整理

一、js中的几个概念

1、区分大小写

JavaScript 严格区分大小写。为了避免输入混乱和语法错误,建议采用小写字符编写代码。在以下特殊
情况下可以使用大写形式:
(1)构造函数的首字母建议大写。构造函数不同于普通函数
(2)如果标识符由多个单词组成,可以考虑使用骆驼命名法——除首个单词外,后面单词的首字母大写

2、直接量

直接量(Literal)就是具体的值,即能够直接参与运算或显示的值,如字符串、数值、布尔值、正则表达式、对象直接量、数组直接量、函数直接量等

3、标识符

标识符(Identifier)就是名称的专业术语。JavaScript 标识符包括变量名、函数名、参数名和属性名
合法的标识符应该注意以下强制规则:
第一个字符必须是字母、下划线(_)或美元符号($)。

除了第一个字符外,其他位置可以使用 Unicode 字符。一般建议仅使用 ASCII 编码的字母,不建
议使用双字节的字符。
不能与 JavaScript 关键字、保留字重名。
可以使用 Unicode 转义序列。例如,字符 a 可以使用“\u0061”表示 (不推荐)

4、变量

变量相当于容器,值相当于容器内装的东西,而变量名就是容器上贴着的标签,通过标签可以找到 变量,以便读、写它存储的值

4.1 声明变量

常用的方式为:var 变量名 = 初始化值;
在一个 var 语句中,可以声明一个或多个变量,也可以为变量赋值,未赋值的变量初始化为
undefined(未定义)值。当声明多个变量时,应使用逗号运算符分隔
var a; //声明一个变量
var a,b,c; //声明多个变量
var b = 1; //声明并赋值
注意:在非严格模式下,JavaScript 允许不声明变量就直接为其赋值,这是因为 JavaScript 解释器能够自动隐式声明变量。隐式声明的变量总是作为全局变量使用。在严格模式下,变量必须先声明,然后才能使用。

4.2 js的弱类型(动态类型)

JavaScript 是弱类型语言,对于变量类型的规范比较松散。具体表现如下:
(1)变量的类型分类不严谨、不明确,带来使用的随意性。
(2)声明变量时,不要求指定类型。
(3)使用过程不严格,可以根据需要自动转换变量类型。
(4)变量的转换和类型检查没有一套统一、规范的方法,导致开发效率低下。
由此带来的优缺点如下:
优点:使用灵活,简化了代码编写。
缺点:执行效率低,在开发大型应用时,程序性能会受到影响。
简单说就是,同一变量可以接受不同的数据类型。

4.2 变量的作用域

在 JavaScript 中, 对象和函数同样也是变量,变量作用域为可访问变量,对象,函数的集合。
变量作用域(Scope)是指变量在程序中可以访问的有效范围,也称为变量的可见性。
JavaScript 变量可以分为全局变量和局部变量:
全局变量:不是声明在函数体内部的变量,变量在整个页面脚本中都是可见的,可以被自由访问。
局部变量:变量仅能在声明的函数内部可见,函数外是不允许访问的。只要函数运行完毕,变量就会被删除

4.2.1 全局变量

网页中所有脚本和函数均可使用
向未声明的 javascript 变量来分配值
如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明。 如:ycdl = "云创动力"; //注:前面没有var
这样声明一个全局变量,哪怕这个变量是声明在函数内部它也是一个全局变量。
全局变量是 window 对象,所有数据变量都属于 window 对象

4.2.2 局部变量

只能在函数内部访问
因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁

4.2.3 生命周期

JavaScript 变量生命周期在它声明时初始化。
局部变量在函数执行完毕后销毁。
全局变量在页面关闭后销毁。

4.3 变量污染

javaScript 可以随意定义保存所有应用资源的全局变量。但全局变量可以削弱程序灵活性,增大了模块之间的耦合性。在多人协作时,如果定义过多的全局变量有可能造成全局变量冲突。
解决方式:

  1. 定义全局变量命名空间
    只创建一个全局变量,并定义该变量为当前应用容器,把其他全局变量追加在该命名空间下
  2. 使用函数体封装应用程序,这是最常用的一种方法
    #### 4.4 let&const
    ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
    let 声明的变量只在 let 命令所在的代码块内有效。
    const 声明一个只读的常量,一旦声明,常量的值就不能改变。
    在 ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量
    ##### 4.4.1 javaScript 块级作用域
    使用 var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到。
    { var a = 10; }// 可以访问到 a
    在 ES6 之前,是没有块级作用域的概念的。
    ES6 可以使用 let 关键字来实现块级作用域。
    let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问
    使用let定义变量也可以解决变量污染问题
    注意:
    在函数体外或代码块外使用 var 和 let 关键字声明的变量,它们的作用域都是 全局的
    在函数体内使用 var 和 let 关键字声明的变量,它们的作用域都是 局部的
    使用let声明的变量不能再次被声明
    ##### 4.4.2 const 关键字
    const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改
    const 定义常量与使用 let 定义的变量相似:
    二者都是块级作用域
    都不能和它所在作用域内的其他变量或函数拥有相同的名称
    两者还有以下两点区别:
    const 声明的常量必须初始化,而 let 声明的变量不用
    const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。b
    ### 5、数据类型
    在JavaScript中,数据类型可以分为原始类型和引用类型。
    #### 1、五种原始数据类型
    Number 数值型:整数和浮点数
    Boolean 布尔类型:true/false
    String 字符串类型:包含字符和字符串
    Null 只有一个值null
    Undefined 未定义/变量未初始化时的类型,只有一个值undefined
    #### 2、typeof 操作符
  3. 作用:判断指定的变量数据类型
  4. 写法:typeof(变量名) 或 typeof 变量名
  5. null 与 undefined 的区别:
    null: 是一个object类型,但没有值,可以认为是引用类型的占位符
    undefined:未初始化的类型,不知道是什么类型
    #### 3、引用类型
    引用类型有:对象(Object)、数组(Array)、函数(Function)
    ### 6、流程控制语句
    #### 1、if 语句
    在一个指定的条件成立时执行代码。
    if(条件表达式) { //代码块; }
    if...else 语句
    在指定的条件成立时执行代码,当条件不成立时执行另外的代码。
    if(条件表达式) { //代码块; }else { //代码块; }
    if...else if....else 语句
    使用这个语句可以选择执行若干块代码中的一个
    if (条件表达式) { //代码块; }else if(条件表达式) { //代码块; }else { //代码块; }
    条件判断可以使用非逻辑运算符
    #### 2、for语句
    循环指定次数
    for (var i=0; i<10; i++) { //需要执行的代码; }
    while语句:
    当指定的条件为 true 时循环执行代码
    while (条件表达式) { // 需要执行的代码; }
    do-while语句:
    最少执行1次循环
    #### 3、break和continue
    break: 跳出整个循环
    continue:跳出本次循环
    ### 7、函数
    JavaScript 使用关键字 function 定义函数。
    函数可以通过声明定义,也可以是一个表达式。
    通俗的讲,可以将函数理解为 用一堆JavaScript代码,来完成某个功能
    #### 1、函数的声明
    个函数的声明(或者说是函数的定义)包含:
  6. 关键字function
  7. 函数名称
  8. 参数列表,包围在括号中并由逗号分隔
  9. 定义函数的 JavaScript 语句,用大括号 {} 括起来
    function functionName(parameters){ // 执行的代码 }
    #### 2、函数表达式
    函数表达式可以存储在变量中:var square = function (number){ return number * number };
    在函数表达式存储在变量后,变量也可作为一个函数使用:var s = square(2);
    #### 3、Function() 构造函数
    通过前边的内容我们学习了函数通过关键字 function 来定义。
    函数同样可以通过内置的 JavaScript 函数构造器(Function())定义
    arg1, arg2, ... argN
    参数名称是一个有效的JavaScript标识符的字符串,或者一个用逗号分隔的有效字符串的列表;例 如“ × ”,“ theValue ”,或“ a,b ”
    functionBody
    一个含有包括函数定义的 JavaScript 语句的字符串
    var sum = new Function("square", "return number * number");
    #### 4、调用函数
    么。调用函数才会以给定的参数真正执行这些动作。例如,一旦你定义了函数 square ,你可以如下这
    样调用它:
    上述语句通过提供参数 2 来调用函数。函数执行完它的语句会返回值 4
    函数一定要处于调用它们的域(范围)中,但是函数的声明可以被提升(出现在调用语句之后)
    提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为
    函数域是指函数声明时的所在的地方,或者函数在顶层被声明时指整个程序
    注意只有使用如上的语法形式(即 function funcName(){} )才可以。而下面的代码是无效
    的。就是说,函数提升仅适用于函数声明,而不适用于函数表达式
    #### 5、函数作用域
    在函数内定义的变量不能在函数之外的任何地方访问,因为变量仅仅在该函数的域的内部有定义。相对应的,一个函数可以访问定义在其范围内的任何变量和函数。换言之,定义在全局域中的函数可以访问所有定义在全局域中的变量。在另一个函数中定义的函数也可以访问在其父函数中定义的所有变量和父函数有权访问的任何其他变量。
    #### 6、嵌套函数和闭包
    你可以在一个函数里面嵌套另外一个函数。嵌套(内部)函数对其容器(外部)函数是私有的。它自身也形成了一个闭包。一个闭包是一个可以自己拥有独立的环境与变量的表达式(通常是函数)。既然嵌套函数是一个闭包,就意味着一个嵌套函数可以”继承“容器函数的参数和变量。换句话说,内部函数包含外部函数的作用域。可以总结如下:内部函数只可以在外部函数中访问。
    内部函数形成了一个闭包:它可以访问外部函数的参数和变量,但是外部函数却不能使用它的参数和变量。
    ##### 7.6.1 闭包
    闭包是 JavaScript 中最强大的特性之一。JavaScript 允许函数嵌套,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。
    但是,外部函数却不能够访问定义在内部函数中的变量和函数。这给内部函数的变量提供了一定的安全性。
    ##### 7.6.2 函数参数
    从ECMAScript 6开始,有两个新的类型的参数:默认参数,剩余参数
    (1) 默认参数
    在JavaScript中,函数参数的默认值是 undefined 。然而,在某些情况下设置不同的默认值是有用的。这时默认参数可以提供帮助。
    在过去,用于设定默认参数的一般策略是在函数的主体中测试参数值是否为 undefined ,如果是则赋予这个参数一个默认值。如果在下面的例子中,调用函数时没有实参传递给 b ,那么它的值就是undefined ,于是计算 a*b 得到、函数返回的是 NaN 。
    (2)剩余参数
    剩余参数语法允许将不确定数量的参数表示为数组。在下面的例子中,使用剩余参数收集从第二个到最后参数。然后,我们将这个数组的每一个数与第一个参数相乘。
    function multiply(multiplier, ...theArgs) {
    return theArgs.map(x => multiplier * x); }
    var arr = multiply(2, 1, 2, 3);
    console.log(arr); // [2, 4, 6]
    ##### 7.6.3注意的事项
  10. 形参的类型:在函数定义的时候不用指定类型,因为是可变类型
  11. 函数的返回值:如果一个函数中需要返回值,直接使用return返回,如果没有返回值,不写
    return。 3. 关于函数的重载:在JS中没有函数的重载,同名的函数会覆盖原来的函数,调用的时候,只会调用最后声明的函数,而且实参的个数与形参数的个数没有关系。
  12. 所有函数的内部都有一个类数组对象,名字叫:arguments,用来接收调用时提交的所有的参
    数。
    #### 7、匿名函数
    var 变量名 = function(参数列表) { 函数体; }
    # 心得体会
    今天将js部分的内容基本结束了,虽然今天学习的得内容很多,但大部分都是概念性的,这让我上课时有点走神,但是下来练习的时候却有点犯难,虽然经过老师的讲解,我明白了轮播图的工作原理,但独立完成时还有困难,这也暴露出了我平时练习不够,手生的问题,所以以后要加强练习。

标签

评论


© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1