发表于: 2019-12-06 10:17:26

1 1227


今天完成的事:了解了es5和es6的变量的区别,学了一部分数组的方法,

明天要完成的事:尽量把js该看的东西看完;如果能看完的话把css的东西过一遍,如果还有时间研究下http协议就好了

难题:基本都是看一便没有时间真的去研究

收获:

let没有变量提升与暂时性死区

let声明的变量,不存在变量提升。而且要求必须 等let声明语句执行完之后,变量才能使用,不然会报Uncaught ReferenceError错误。

let 配合for循环的独特应用

let非常适合用于 for循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。

ES6可以用let定义块级作用域变量

在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。

let变量不能重复声明

let不允许在相同作用域内,重复声明同一个变量

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

for循环中小括号中声明的变量与循环体中声明的变量处在不同的作用域中



const其实是定义了一个常量并引用了一个值,所以才会不能更改且必须先进行初始化


箭头函数

ES6 新增了箭头函数。

箭头函数表达式的语法比普通函数表达式更简洁。

有的箭头函数都没有自己的 this。 不适合顶一个 对象的方法

当我们使用箭头函数的时候,箭头函数会默认帮我们绑定外层 this 的值,所以在箭头函数中 this 的值和外层的 this 是一样的。

箭头函数是不能提升的,所以需要在使用之前定义。

使用 const 比使用 var 更安全,因为函数表达式始终是一个常量。

如果函数部分只是一个语句,则可以省略 return 关键字和大括号 {},这样做是一个比较好的习惯:



自调用函数

函数表达式可以 "自调用"。

自调用表达式会自动调用。

如果表达式后面紧跟 () ,则会自动调用。

不能自调用声明的函数。

通过添加括号,来说明它是一个函数表达式:


arguments 对象

JavaScript 函数有个内置的对象 arguments 对象。

argument 对象包含了函数调用的参数数组。

通过这种方式你可以很方便的找到最大的一个参数的值:

x = findMax(1, 123, 500, 115, 44, 88);

 

function findMax() {

    var i, max = arguments[0];

    

    if(arguments.length < 2) return max;

 

    for (i = 0; i < arguments.length; i++) {

        if (arguments[i] > max) {

            max = arguments[i];

        }

    }

    return max;

}

或者创建一个函数用来统计所有数值的和

x = sumAll(1, 123, 500, 115, 44, 88);

 

function sumAll() {

    var i, sum = 0;

    for (i = 0; i < arguments.length; i++) {

        sum += arguments[i];

    }

    return sum;

}

如何创建一个节点并添加在已知元素节点后面

自己都快忘了

移除已存在的元素

要移除一个元素,你需要知道该元素的父元素。



数组对象的方法:

pop() 方法用于删除数组的最后一个元素并返回删除的元素。此方法改变原数组的长度!

push():往数组最后添加一个或n个值:返回值是一个新的长度,会改变原数组

unshift():在数组的开头添加一个或更多元素,并返回新的长度。

shift():用于把数组的第一个元素从其中删除,并返回第一个元素的值。会改变原数组

splice(x,y,z):x是在第几位添加后面的z元素,y是删除几个元素    删除的是原数组x位置上的元素

返回值

如果仅删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。


concat() 方法用于连接两个或多个数组。

该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

array1.concat(array2,array3,...,arrayX)

返回值是:返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。不会改变原数组


some():不会改变原数组:返回值是:Boolean值

some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。

some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。


indexof():返回一个数字,查找括号内的值的索引值;

Math 对象

Math 对象用于执行数学任务。

random();返回一个0-1的随机数:配合floor可以返回一个整数随机数;

floor:返回小于等于x的最大整数


setInterval()

语法

setInterval(code,millisec,lang)

code:必需。要调用的函数或要执行的代码串。

millisec:必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。

lang:可选。 JScript | VBScript | JavaScript


setTimeout()

语法

setTimeout(code,millisec,lang)

millisec:必需。在执行代码前需等待的毫秒数。



本地储存:

localStorage:储存时间长,不会随着标签页的关闭而消除,

sessionStorage:会随着标签页的关闭而消除,储存时间短



js一些常用的方法:

常用方法

isNAN():  用来判断一个变量是否为非数字的类型,但会true或false

length:   用来确定一个数据的长度

typeof:   用来检测数据的数据类型

toString()/String():将数据转换为字符串类型

parseInt()/parseFloat(): 将数据转换数字类型

Number:Number() 函数把对象的值转换为数字。



作用域链的用途是保证对执行环境有权访问的所有变量和函数有序访问。

    执行环境:所有JavaScript代码都是在一个执行环境中被执行的。执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域、生存期等方面的处理,它定义了变量或函数有权访问的其他数据(包含了外部数据),决定他们各自的行为。


       全局执行环境: 全局环境是最外围的一个执行环境,根据ECMAScript实现所在的宿主环境不同,表示执行环境的对象也不一样,在web中,全局执行环境被认为是window对象。


       函数执行环境:每个函数都有自己的执行环境,当执行进入一个函数时,函数的执行环境就会被推入一个执行环境栈的顶部并获取执行权。当这个函数执行完毕,它的执行环境又从这个栈的顶部被删除,并把执行权并还给之前执行环境。这就是ECMAScript程序中的执行流。


       变量对象:每个执行环境都有一个变量对象与之关联,执行环境中定义的所有变量及函数(只包含在当前函数内定义的函数,局部变量)都保存在这个对象中,我们编写的代码无法直接访问这个对象,但解析器在处理数据时会在后台使用它。(变量对象就是作用域为该执行环境的函数,变量的集合对象)。


       作用域:变量或方法有访问权限的代码空间,即变量或函数起作用的区域。


       作用域链:由当前环境栈中对应的变量对象组成。作用域的用途,是保证对执行环境有权访问的所有变量和函数的有序访问,作用域前端,始终是当前执行的代码所在的环境对应的变量对象,下一变量对象来自包含(外部)环境,而再下一变量对象则来自下一包含环境,一直延续到全局执行环境。

https://v.qq.com/x/page/a0911kkkjmr.html?pcsharecode=dyv5MFcj&sf=uri


我对这东西的理解:执行环境(也就是执行上下文)就像一个圈,全局就是最大的圈然后变量对象就是一只笔,每个圈都有自己的笔:作用域的话就是颜料,这个颜色在这个圈内能画在别的圈内能不能画,看画那个圈的时候有没有准备作用域链的话就像是一个圈套着一个圈,这个圈没有,按着顺序往上个圈借点,



返回列表 返回列表
评论

    分享到