Blog icon indicating copy to clipboard operation
Blog copied to clipboard

《JavaScript深入之闭包》讨论

Open JackDan9 opened this issue 4 years ago • 3 comments

例子和闭包没有任何关系

Hello, 这样的理解不知道对不对啊?

var data = [];

for(var i = 0; i < 5; i++) {
    data[i] = function() {
        console.log(i);
    }
}

data[0]();
data[1]();
data[2]();
data[3]();
data[4]();


// VS

var data = [];

for(var i = 0; i < 5; i++) {
    data[i] = (function(i) {
        return function() {
            console.log(i)
        }
    })(i)
}

data[0]();
data[1]();
data[2]();
data[3]();
data[4]();

只是通过LIFE人为制造一个函数作用域来弥补es5没有块作用域的缺陷而已。

JackDan9 avatar Aug 26 '20 01:08 JackDan9

在函数作用域内引用了其他外层作用域的变量,就构成了闭包。

o-cc avatar Sep 20 '20 08:09 o-cc

@JackDan9 这样理解也可以,还有应该是 IIFE 吧

mqyqingfeng avatar Nov 22 '21 02:11 mqyqingfeng

今天面试拼多多,面试官问:子函数调用父函数,算是闭包吗? function parent() { return function child() { parent(); } } 按照闭包的定义,函数引用了其他上下文的变量对象成员。应该不算是闭包吧? 有没有大佬从本质上分析下。

johe-a avatar Dec 13 '22 02:12 johe-a