什么是闭包
- 闭包是可以另一个作用域的函数,并常驻内存中
/**
* 需要记住的函数也有自己的作用域,函数也是一个对象,对于回调函数的使用
* 1.匿名函数具有全局性,故匿名函数的this 指向window的对象;即是没有名字的函数(跟闭包有点像)
* 2.箭头函数:与匿名函数还是有点区别,
* 箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。
由于JavaScript函数对this绑定的错误处理,下面的例子无法得到预期结果:
* 3.函数表达式:属于匿名函数,并将匿名函数赋值给了一个变量;
*
*
* */
//对于闭包, 是有权限访问另一个作用域的函数!!!!!!!!!!
// this 与call(); apply)();arguments的用法
function test(test1, test2) {
console.log("hhh");
console.log(test1 + test2);
}
function applyTest1(test1, test2) {
// return test.apply(this,[test1,test2]); // 传入数组
//return test.apply(this,arguments); //arguments 为一个伪数组;
//return test.call(this,test1,test2);// apply与call用法的差别就在这里
return test.call(this,...arguments);//会出现问题;argument是以数组的方式传入
// return test.bind(this)()//需要加上 (), 进行调用;
}
applyTest1(4,6);
var name = "名字";
var person = {name: "小明"};
console.log(...person);
function sayHello () {
console.log(this.name )//+ ': hello'
}
var personSay = sayHello.bind(person); //bind的用法
personSay();
/*****
*
* caller, callee
*
* */
var a = function() {
console.log(a.caller);
}
var b = function() {
a();
}
b();
function createFunctions(){
var result = new Array();
for (var i=0; i < 10; i++){
result[i] = function(){
return i;
};
}
return result;
}
//解释一下这个 闭包问题
//在作用域链 整个作用对象变量(createFunctions->执行后 最后i 10跳出, 这是return i访问的所有都是10)