js之function对象和闭包函数
call 和 apply 方法
Function 对象的 call 和 apply 方法:可以用来调用所有者对象作为参数的方法,通过 call 和 apply 方法,能够使用属于另一个对象的方法。call() 和 apply() 之间的区别:call() 方法分别接受参数。apply() 方法接受数组形式的参数。如果要使用数组而不是参数列表,则 apply() 方法非常方便。
var personFunc = {
fullName: function (city, country) {
return this.firstName + " " + this.lastName + "," + city + "," + country;
},
};
var person = {
firstName: "Bill",
lastName: "Gates",
};
console.log(personFunc.fullName.apply(person, ["Oslo", "Norway"])); //Bill Gates,Oslo,Norway
console.log(personFunc.fullName.call(person, "Seattle", "USA")); //Bill Gates,Seattle,USA
let fullName = personFunc.fullName.bind(person);
console.log(fullName("Seattle", "USA")); //Bill Gates,Seattle,USA
Math.max(1, 2, 3); // 会返回 3
// 在数组上模拟 max 方法
Math.max.apply(null, [1, 2, 3]); // 也会返回 3
闭包函数
简称“闭包”,指的是有权访问另一个函数作用域内的变量(局部变量)的函数。即函数表达式位于另一个函数的函数体内。而且这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是从外部函数返回时的值,但也会受到内部函数的影响。闭包的作用就是在 a 执行完并返回后,闭包使得 Javascript 的垃圾回收机制不会收回 a 所占用的资源,因为 a 的内部函数 b 的执行需要依赖 a 中的变量。
注意::由于闭包会使函数中的变量一直保存在内存中,内存消耗很大,所以闭包的滥用可能会降低程序的处理速度,造成内存消耗等问题。
var add = (function () {
var counter = 0;
return function () {
return (counter += 1);
};
})();
浙公网安备 33010602011771号