function jjj(asi) {
  asi=3;
}

jjj();
console.log(asi);


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

根据书籍和官方文档,我已经研究过,如果您提到的变量名不带关键字var,那么它将变为全局变量,因此我认为同一规则也适用于asi变量

最佳答案

在这里,我认为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);

10-06 04:21