我正在框架内开发一个小部件,因此我需要使用类似下面的模式来记录变量“ a”。如何“调用”此函数log_a,以便它可以访问在调用它的执行上下文中声明的变量?即让控制台输出“ a value”,而不是当前无法找到变量“ a”的错误。
(function(global) {
global.log_a = function() {
console.log(a);
};
}(window));
var anotherFunction = function() {
var a = 'a value';
log_a();
};
anotherFunction();
编辑:
我试图简化示例以使问题更易于理解,但现在我看到它引起了混乱。更新后有更多说明:
代码的第一部分试图模仿我将大型函数移动到另一个文件中以获得更简洁代码的工作。
我正在使用一个库,其中一个输入是一个函数,它将始终向其传递一个参数,因此我没有选择添加额外参数的选择(即,建议将“ a”作为参数的答案)
将“ a”声明为全局作品的诀窍是我目前正在使用的技巧,但我认为这不是最佳实践。
所以我的问题是(我猜答案是“不可能”),是否有某种方法可以调用log_a,使其行为类似于代码如下:
var anotherFunction = function() {
var a = 'a value';
var log_a = function() {
console.log(a);
};
};
anotherFunction();
答案 0 :(得分:1)
变量indices_items = []
for l in items:
indices_items.append(np.argwhere(l >= 0.7).flatten().tolist())
indices_items
Out[5]:
[[0],
[1, 5, 6, 7],
[2, 6, 7, 9],
[3],
[],
[1, 5, 8],
[1, 2, 6, 7, 9],
[1, 2, 6, 7, 9],
[5, 8],
[2, 6, 7, 9]]
仅存在于函数a
的范围内;
anotherFunction
您可以将变量(function(global) {
global.log_a = function() {
console.log(a);
};
}(window));
var anotherFunction = function() {
// var a exists only here, inside this function
var a = 'a value';
// log_a is another function, it has its own scope,
// and it doesn't know about var a
log_a();
};
anotherFunction();
作为a
的参数传递给log_a
中的log_a(a)
,也可以使变量anotherFunction
可供两个{ {1}}和a
函数:
anotherFunction
答案 1 :(得分:1)
您可以使用函数 arguments 将a
的值传递给您的log_a
方法。您当前正在发生的问题是var a = 'a value'
未知log_a
,因为它是在另一个函数中定义的。这是因为无法在函数范围之外访问在函数范围内用var
声明的变量。因此,您最好执行以下操作:
(function(global) {
global.log_a = function(a) { // retrieve 'a' as an argument in the log_a method
console.log(a); // print the argument passed through
};
}(window));
var anotherFunction = function() {
var a = 'a value';
log_a(a); // pass through 'a' into the `log_a` method
};
anotherFunction();
答案 2 :(得分:1)
您可以从该函数传递变量a 值,以便 log_a()函数可以访问该变量值。
(function(global) {
global.log_a = function(a){
console.log(a);
};
}(window));
var anotherFunction = function() {
var a = 'a value';
log_a(a);
};
anotherFunction();