在没有关键字var的JavaScript中的范围


function jjj(asi) {
  asi=3;
}
jjj();
console.log(asi);

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

根据书籍和官方文档,我研究了,如果您提到没有关键字var的变量名称,则它将变成全局

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

如果您没有将其声明为参数,例如:

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

请注意,隐式全球群体是一个非常糟糕的主意(我在其上拨打了我的博客文章 horror of Intient Globals 是有原因的(您应该使用严格的模式使它们始终应遇到的错误:

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

在您的情况下,函数参数用新值重新分配。

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);

最新更新