执行环境(作用域)

每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
在WEB浏览器中,全局作用域被认为是window对象。
每个函数有自己的作用域。
非全局的执行环境(局部作用域)的代码块执行完毕后,该环境及保存在该环境的所有变量和函数也随之销毁。
全局执行环境直到关闭网页或浏览器时才销毁。

作用域链

当代码在一个环境中执行时,会创建变量对象的一个作用域链,它保证了当前执行环境对符合访问权限的变量和函数的有序访问。

        var a = 1;

        function outer() {
            var b = 2;

            function inner() {
                var c = 3;
                console.log(b);
                //可以访问a, b, c
                //函数inner()的作用链包含三个对象,自己的变量对象,outer()函数的变量对象和全局的变量对象
                //inner()的局部环境开始时会在自己的变量对象中搜索变量和函数名,如果搜不到则再搜索上一级作用域
//在搜索过程中,如果存在一个局部变量的定义,则搜索自动停止
            }

            inner();
        }

        outer();

splice()

方法通过删除现有元素和/或添加新元素来更改一个数组的内容。

indexOf()和lastIndexOf()

indexOf()从数组的开头开始查找
lastIndexOf()从数组的末尾开始向前查找
返回查找项在数组中的位置,查找时比较采用严格相等

数组的迭代方法

callback[, thisArg]
每个方法都接受两个参数,1、每个元素执行一次 callback 函数2、运行该函数的作用域对象
callback 被调用时传入三个参数:元素值,元素的索引,原数组。
every()方法测试数组的所有元素是否都通过了指定函数的测试。
filter()方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
forEach()方法对数组的每个元素执行一次提供的函数。
map()方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
some()方法测试数组中的某些元素是否通过由提供的函数实现的测试。与every()的区别,every()每一项都返回true,这个方法才返回true。some()只要一项返回true,就会返回true。