1. 函数定义时候传递的参数
参数类型为 -- 基本数据类型
不会外部定义变量的值产生影响,是否可以理解为函数为基本数据类型的参数开辟了新的空间,指向这个空间之后,即使修改了参数的值耶不会改变原始值
参数类型为 -- 数组/对象
将数组或者对象作为参数传递进函数时, 对象值或者数组值得改变,会影响到外部变量得值. 这是因为他们指向得是同一个空间,所以改变参数值也会改变数组对象得值
arguments
从【0】下标开始,可以获取给函数的传参
参数为函数的时候
2. 基本数据类型和数组对象得拷贝
3. 在函数内部定义得变量,只能在该函数内部调用,外部不能调用该变量会报错, 嵌套的函数可以使用父函数里面定义的变量
4. 闭包 ( 1. 供函数外部访问函数内部定义的变量(因为函数的作用域链的问题) 2. 将函数内部创建的变量的值始终保持在内存中,以供本地环境使用)
// 方法一
// 并不是直接访问的abc函数中定义的a变量,而是创建了一个新的变量来代替她的值
// abc函数再调用完毕后,a变量也就被回收了,但是闭包的话是依旧保存着这些变量的
function abc (){
var a = 10;
return a;
}
var b = abc();
b = b + 10; // 20
// 方法二 -- 闭包实现
function bcd () {
var a = 10;
return function () {
return a + 10;
}
}
bcd()()
5. arguments.callee
6.
function outside (x) {
return function (y){
return x + y;
};
};
outside(3)(5); //8
7. 作用域链(函数A, B, C, A 嵌套 B, B 嵌套 C, C可以调用 B 和 A 中定义的变量和方法, B 可以调用 A中定义的变量和方法, 但是A 不能调用 B 和 C的)