我如何访问全局变量而不是参数值?

时间:2017-08-06 21:23:39

标签: javascript node.js

我想用“apfala”

访问变量
var frucht="apfala";
function getFrucht(frucht){
console.log(frucht);
console.log(this.frucht) // I want here the apfala one, I thought .this would work
}
getFrucht("apfel");

或者我是否必须以不同方式重命名?

4 个答案:

答案 0 :(得分:1)

如果您的javascript在浏览器中运行,您可以使用window全局变量来访问在全局范围中定义的变量frucht

var frucht="apfala";
function getFrucht(frucht){
  console.log(frucht);
  console.log(window.frucht) // I want here the apfala one, I thought .this would work
}
getFrucht("apfel");

答案 1 :(得分:1)

如果是全局,则表示您正在浏览器中运行:

您可以使用window.frucht作为全局变量是window对象的属性。

虽然不重复使用相同的变量名称会更好。它避免了对全局变量的依赖以及重用名称的混淆。

答案 2 :(得分:1)

一般来说,在JavaScript中,如果要将父作用域传递给子作用域,则需要将父作用域中的this分配给变量并访问子句中的该变量:

var frucht="apfala";
var parent = this;
function getFrucht(frucht){
  console.log(frucht);
  console.log(parent.frucht);
}
getFrucht("apfel");

此外,如其他答案中所述,如果您在浏览器中工作,只需使用window对象附加和访问全局变量(window.frucht="apfala",然后使用window.frucht访问那个变量)

希望有所帮助。

答案 3 :(得分:1)

http://eslint.org/docs/rules/no-shadow

  

阴影是局部变量共享相同的过程   将name命名为其包含范围中的变量。例如:

var a = 3;
function b() {
    var a = 10;
}
     

在这种情况下,b()内部的变量a遮蔽了变量a   在全球范围内。这可能会在阅读代码时造成混淆   并且无法访问全局变量。

您的代码建议您需要重新考虑您要做的任何事情。由于目前还不清楚你要做什么的真实性质,很难为你的问题建议一个替代解决方案(除了不影子或使用全局),如果你有一个而不仅仅是好奇心?

请不要这样做,但这应该适用于所有环境。

'use strict';

var getGlobal = Function('return this');

getGlobal().frucht = 'apfala';

function getFrucht(frucht) {
  console.log(frucht);
  console.log(getGlobal().frucht); // I want here the apfala one, I thought .this would work
}

getFrucht('apfe');

另见:https://www.npmjs.com/package/system.global