gpt4 book ai didi

JavaScript 赋予被调用函数访问调用函数变量的权限

转载 作者:行者123 更新时间:2023-11-29 18:00:08 24 4
gpt4 key购买 nike

如果我在函数内部定义一个内部函数,则该内部函数可以访问外部函数的变量。如果我希望此内部函数可重用并将其定义在外部函数之外,则内部函数现在无法访问外部函数变量。如何使这个新的可重用内部函数能够访问外部函数变量,而不将这些变量作为参数传递?

        function a () {

var x = [[1,2,3], [1,2,3], [1,2,3]];

var keys = Object.keys(x[0]);

for (var i = 0; i < x.length; i++) {
angular.forEach(keys, loop);
}

}

function loop (key) {
console.log(key, i);//i is undefined here
}
a();

具体来说,有没有什么方法可以不 1) 为它分配变量,2) 不将变量作为参数传递,以及 3) 不创建全局变量?

编辑:似乎没有办法做到这一点。但是如果我尝试另一种方法,让可重用函数返回一个新函数,我也无法访问内部范围。为什么会这样,有什么方法可以让它发挥作用吗?

        function a () {

var x = [[1,2,3], [1,2,3], [1,2,3]];

var keys = Object.keys(x[0]);
var myloop = loop();

for (var i = 0; i < x.length; i++) {
angular.forEach(keys, myloop);
}

}

function loop (key) {
return function(key) {
console.log(key, i);//i is undefined here
};
}
a();

最佳答案

在下面的示例中,loop 返回一个函数,该函数关闭 i 的值。

function a () {
var x = [[1,2,3], [1,2,3], [1,2,3]];

var keys = Object.keys(x[0]);

for (var i = 0; i < keys.length; i++) {
keys.forEach(loop(i));
}
}

function loop (i) {
return function (key) {
console.log(key, i); // i is now defined
}
}

a();

输出:

0 0
1 0
2 0
0 1
1 1
2 1
0 2
1 2
2 2

关于JavaScript 赋予被调用函数访问调用函数变量的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35583323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com