【问题标题】:How to access global variable from a function when the name is same as argument name in JavaScript? [duplicate]当名称与 JavaScript 中的参数名称相同时,如何从函数访问全局变量? [复制]
【发布时间】:2016-06-28 19:27:13
【问题描述】:

当名称与 JavaScript 中的参数名称相同时,如何从函数中访问全局变量?

var name = null;

function func(name) {
  // How to set the global variable with the passed value
}

【问题讨论】:

  • 在浏览器环境中,所有全局变量都存储在window命名空间:window.name
  • @MitchKarajohn 我假设“全局变量”实际上意味着全局变量:-)

标签: javascript variables scope global


【解决方案1】:

将参数名称更改为其他名称。没有别的办法,因为它总是会看到最里面的name

【讨论】:

【解决方案2】:
var name = 'Name outer';

function func(name) {
  console.log(name);
  console.log(window.name);
}

func ('Name inner');

但是,这是不好的做法,您应该避免出现这种情况。

【讨论】:

  • 您能否详细说明为什么这是不好的做法? +1
  • 正如 Mitch 所说,只有当你在这个精确的结构中拥有它时,它才有效,在窗口范围内是全局的。最好将它作为参数传递或具有不同的名称,并且通常使代码更具模块化和可读性。如果您倾向于坚持这种编写代码的方式,那么下一个看到此代码的开发人员会讨厌您,并且一眼就不会知道那里发生了什么。
【解决方案3】:

如果你真的在谈论一个全局变量,可以这样做:

function func(name) {
  window.name=name;
}

在浏览器中或

function func(name) {
  global.name=name;
}

在 node.js 中,但如果您在函数中声明 name,则无法做到这一点。

但是,您应该尽可能避免使用 gobal 变量,因为它们由所有使用的代码(包括库)共享,并且您不知道这是否会在名称冲突的情况下产生任何副作用。

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2021-12-17
    • 2016-03-23
    相关资源
    最近更新 更多