function jjj(asi) {
  asi=3;
}
jjj();
console.log(asi);在这里,我认为asi是一个全局变量,但是在运行这段代码时,它给出的是没有定义asi。
根据书籍和官方文档,我已经研究过,如果您在没有关键字var的情况下提到变量名,那么它就变成全局的,所以我认为同样的规则也适用于asi变量。
发布于 2018-02-28 05:39:28
在这里,我认为asi是一个全局变量,但是在运行这段代码时,它没有定义asi。
如果不是将声明为参数,则将创建一个隐式全局,例如:
function jjj() {
//           ^---------- removed `asi` here
  asi = 3;
}
jjj();
console.log(asi);
请注意,隐式全局值是一个非常糟糕的主意(我将关于它们的博客文章称为是有原因的),您应该使用严格模式来使它们产生它们应该一直存在的错误:
"use strict";
function jjj() {
  asi = 3; // ReferenceError: asi is not defined
}
jjj();
console.log(asi);
发布于 2018-02-28 05:39:00
在您的示例中,函数参数是用一个新值重新分配的。
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);
https://stackoverflow.com/questions/49022581
复制相似问题