前言:大家好,我是小白特菜!今天开始入驻掘金写文章,主要内容是前端方面和招财方面。上个月裸辞后,没找到工作,现在在这里记录一下学习心得。为了更美好的明天而奋斗,做一个上进的人!!!
面试官问了执行上下文的问题,我没写出来,现在在这里分享一下,并且针对这个基础知识,写一下笔记。
题目:
var a = 3
var result = []
var total = 0
function fn(a) {
var i = 0
for(; i<3; i++) {
result[i] = function() {
total += i*a
}
}
}
fn(1)
result[0]()
console.log(total) //3
result[1]()
console.log(total) //6
result[2]()
console.log(total) //9
解析:(显浅) 执行result[i]()方法的时候,for循环已经执行完,所以i为3;result[i]在fn执行后,进行变量的赋值,它就是我们平常说的函数表达式。在函数作用域内,全局变量使用到的变量,都不会被回收。(个人见解)
闭包就是函数作用域的局部变量被外部引用,导致没有被释放。