我创建了这个功能
function calc (a, b, variableName){
variableName = a * b;
}
该点是多个a和b并创建全局变量
calc(2, 5, first);
calc(3, 5, second);
第一个函数调用应该是first = 10;第二次通话应该是秒= 15;
但它不起作用,如何在函数调用中获取全局变量并定义其名称?
答案 0 :(得分:3)
让函数返回值,然后将函数调用的结果赋给变量。
function calc (a, b){
return a * b;
}
first = calc(2, 5);
second = calc(3, 5);
答案 1 :(得分:2)
JavaScript is pass by value。但使用var
(不是let
或const
)声明的全局变量是represented on the global object(浏览器中为window
),反之(即定义全局变量属性)也可以在全局范围内使用对象。
因此,只需将要更改的变量的名称作为字符串而不是值传递 - 然后更改全局对象上的相应属性。
请注意,除非申请绝对必要,否则polluting the global scope通常不是一个好主意。
const alter = (prop, val) => Object.assign(window, { [prop]: val });
// Define a global variable
var test = 1;
// Alter the global variable
alter('test', 2);
console.log(test);
// Create a new global variable
alter('hello', 'world');
console.log(hello);

此概念适用于您的具体示例:
function calc(a, b, variableName) {
window[variableName] = a * b;
}
calc(2, 5, 'first');
calc(3, 5, 'second');
console.log(first, second);

答案 2 :(得分:1)
真的不推荐......但是如果你在Web浏览器中这样做,你可以将它们附加到window
对象,然后它们将直接按名称提供。请注意,变量名必须作为字符串传递:
function calc (a, b, variableName){
window[variableName] = a * b;
}
calc(2, 5, 'first');
calc(3, 5, 'second');
console.log(first);
console.log(second);

答案 3 :(得分:0)
有办法做到这一点。第一个正是你所描述的,但不是一个好主意。
▶ node
> global.a = 5
5
> a
5
节点中的global
对象使其全部范围内的所有子节点。
与Tiny Giant描述的相同,但是后端。