函数
函数
传递方式
函数参数如果是原始类型的值(数值、字符串、布尔值),传递方式是传值传递(passes by value)。这意味着,在函数体内修改参数值,不会影响到函数外部。
var p = 2;
function f(p) {
p = 3;
}
f(p);
p // 2
但是,如果函数参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递(pass by reference)。也就是说,传入函数的原始值的地址,因此在函数内部修改参数,将会影响到原始值。
var obj = { p: 1 };
function f(o) {
o.p = 2;
}
f(obj);
obj.p // 2
闭包
因为作用域关系,我们无法在函数外部获得函数内部变量,我们需要一些操作(闭包)获得函数内部变量
function f1() {
var n = 999;
function f2() {
console.log(n);
}
return f2;
}
var result = f1();
result(); // 999
上述代码中闭包就函数f2. 在JavaScript中只有函数内部的子函数能读取函数的变量,因此可以把闭包理解成“定义在函数内部的一个函数”。同时闭包还能让这些变量一直存在于内存中。
注意,因为闭包能一直使变量存在于内存中,所有不能滥用闭包,会造成计算机性能的损失。
eval
为了保证eval的别名不影响代码优化,所以JavaScript定义凡是使用别名eval,eval内部一律全是全局作用域。

浙公网安备 33010602011771号