JavaScript函数 - 传递变量并从中创建全局变量

时间:2017-12-30 02:28:23

标签: javascript function

我创建了这个功能

function calc (a, b, variableName){
  variableName = a * b;
}

该点是多个a和b并创建全局变量

calc(2, 5, first);
calc(3, 5, second);

第一个函数调用应该是first = 10;第二次通话应该是秒= 15;

但它不起作用,如何在函数调用中获取全局变量并定义其名称?

4 个答案:

答案 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(不是letconst)声明的全局变量是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描述的相同,但是后端。