function jjj(asi) {
asi=3;
}
jjj();
console.log(asi);
在这里,我认为asi
是一个全局变量,但在运行此代码时,它表示未定义asi
。
根据我研究过的书籍和官方文档,如果你提到没有关键字var的变量名,那么它就变成了全局,所以我认为同样的规则也适用于asi变量
答案 0 :(得分:2)
这里我认为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);

答案 1 :(得分:1)
在您的情况下,函数参数将重新分配一个新值。
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);

答案 2 :(得分:0)
对于功能代码,参数也会添加为该功能环境的绑定。
从函数中删除参数以使asi
表现为全局变量。
function jjj(){ asi=3; }
jjj();
console.log(asi);