我无法理解自动全局背后的想法。我正在阅读以下内容: https://www.w3schools.com/js/js_scope.asp
https://www.w3schools.com/js/tryit.asp?filename=tryjs_local_global
函数myFunction()被调用。如果我删除此呼叫,它将不显示任何内容。我不明白为什么要对myFunction()中的未声明变量自动进行全局调用,必须调用myFunction()。似乎不是那么直观。
答案 0 :(得分:2)
表达式
var varName = 'value';
用var varName
声明变量,然后用= 'value'
为其赋值'value'
表达式
varName = 'value';
仅使赋值'value'
到变量“ varName”,该变量应事先声明
如此
function a() {
var varName = 'a'
}
在本地声明变量varName
并用'a'
初始化
但是
function b() {
varName = 'b'
}
只给变量varName
赋值'b'
。但是变量varName
要在paren全局范围内声明。
答案 1 :(得分:1)
它的全部意思是在这段代码中:
function myFunction() {
carName = "Volvo";
}
carName
在执行后位于外部 myFunction
中,并可由其他代码使用。而:
function myFunction() {
var carName = "Volvo";
}
carName
仅在 myFunction
之内存在,即使在被调用之后也是如此。 myFunction
以外的代码看不到。
答案 2 :(得分:0)
当您“声明”一个没有显式声明关键字(var / let / const)的变量时,对于您的意图是引用一个可能在更大范围内还是不在更高范围内的现有变量,还是存在一些歧义。声明一个新变量。 JavaScript的早期定义行为大部分是尝试具有后备行为以提高灵活性。当将变量分配给但没有现有引用时,它将退回到创建变量。而且,如果没有任何声明关键字,就无法推断您想要的范围,因此它将在全局范围内创建它,以便其他可能的引用可以找到它。
在您的情况下,当您调用函数时,它引用了一些变量。 JavaScript不知道这是否已经存在,因此它在全局范围内创建它。结果,它仍然在范围内,并且在调用该方法之后可以引用。