深入学习之函数执行2
AFTER YOU 23:40:56
function fn() {
var i = 10;
return function (n) {
console.log(n + (++i));
}
}
var f = fn();
f(10);//21
f(20);//32
fn()(10);//->先执行fn返回一个小的函数,然后把小的函数紧接着在执行,并且给n传递参数值为10
fn()(20);
VM4161:4 21
VM4161:4 32
VM4161:4 21
VM4161:4 31
fn()()使用的外部的i会被销毁
外部有人使用就不销毁
不销毁和暂时不销毁最终销毁(没人引用了)
//1、看函数执行的时候,函数名之前是否有".",有的话,"."前面是谁this就是谁,没有的话this都是window
//2、自执行函数中的this永远是window
//3、给元素的某一个事件绑定方法,当事件触发方法执行的时候,方法中的this是当前的元素
var num = 2;
var obj = {
num: 3,
fn: (function (num) {
this.num *= 2;
num += 1;
var num = 3;
return function () {
this.num *= 2;
num += 2;
console.log(num);
}
})(num)//->此处是把全局变量num的值2传递给自执行函数中的形参,如果想传递的是obj下的num属性值3,需要这样写:obj.num
};
var fn = obj.fn;
fn();//->5
obj.fn();//->7
console.log(window.num, obj.num);//->8、6
this要看执行对象