前端小题目1

151 阅读1分钟

  前言:大家好,我是小白特菜!今天开始入驻掘金写文章,主要内容是前端方面和招财方面。上个月裸辞后,没找到工作,现在在这里记录一下学习心得。为了更美好的明天而奋斗,做一个上进的人!!!

  面试官问了执行上下文的问题,我没写出来,现在在这里分享一下,并且针对这个基础知识,写一下笔记。

  题目:

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执行后,进行变量的赋值,它就是我们平常说的函数表达式。在函数作用域内,全局变量使用到的变量,都不会被回收。(个人见解)

闭包就是函数作用域的局部变量被外部引用,导致没有被释放。