【问题标题】:scope in javascript without the keyword varjavascript中没有关键字var的范围
【发布时间】:2018-02-28 05:33:07
【问题描述】:
function jjj(asi) {
  asi=3;
}

jjj();
console.log(asi);

在这里我认为asi 是一个全局变量,但是在运行此代码时它给出了asi 未定义。

根据我研究过的书籍和官方文档,如果你提到变量名时不带关键字 var,那么它就会变成全局变量,所以我认为同样的规则也适用于 asi 变量

【问题讨论】:

  • 你没有定义一个全局变量。您正在重新定义函数的参数。
  • @xufox 我认为这个参数是可变的,我们可以在代码的其他部分使用它
  • 您的意思是在函数外部使用参数asi?不,这绝对不可能。

标签: javascript scope


【解决方案1】:

在这里我认为 asi 是一个全局变量,但是在运行此代码时,它给出了 asi 未定义

这将创建一个隐式全局如果您没有将其声明为参数,例如:

function jjj() {
//           ^---------- removed `asi` here
  asi = 3;
}
jjj();
console.log(asi);

请注意,隐式全局变量是一个非常糟糕的主意(出于某种原因,我将我的博客文章称为The Horror of Implicit Globals),您应该使用strict mode 使它们成为它们应该出现的错误曾经:

"use strict";
function jjj() {
  asi = 3; // ReferenceError: asi is not defined
}
jjj();
console.log(asi);

【讨论】:

    【解决方案2】:

    在您的情况下,函数参数被重新分配了一个新值。

    function jjj(asi) {
      asi = 3 // the function argument will have new value
      mno = 4 // this will be a global variable
    }
    jjj();
    console.log(asi);
    console.log(mno);

    【讨论】:

      猜你喜欢
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多