1.题目
var num = 20;
var obj = {
num: 30,
fn: (function (num) {
this.num *=3;
num += 15;
var num = 45;
return function () {
this.num *= 4;
num += 20;
console.log(num);
}
})(num)
}
var fn = obj.fn;
fn();
obj.fn();
console.log(window.num, obj.num);
2.画图解析:
3.答案
- 最重要的是上边的分析图,答案很好得到
4.总结
主要对我出错的点,记录下
- 1.自执行函数是遇到时,同时完成声明定义。
- 2.fn = obj.fn,把obj.fn的运行结果赋值给fn(本人错误的让obj里边的fn指向把自执行函数的栈)
- 3.obj.fn() 执行时,执行的是xxxfff222的代码,因为上一条错误,导致我再开了新的栈运行了自执行函数(怎么错的这么离谱)
总结:加括号是把函数执行后的值赋值给变量;不加括号是把函数本身赋值给变量