我无法理解自动全局背后的想法。我正在阅读以下内容:https://www.w3schools.com/js/js_scope.asp
https://www.w3schools.com/js/tryit.asp?filename=tryjs_local_global
函数myFunction((被调用。如果我删除此调用,它将不显示任何内容。我不明白为什么myFunction((中未声明的变量需要调用才能自动全局化。看起来不那么直观。
表达式
var varName = 'value';
用var varName
声明变量,然后用= 'value'
为其赋值"value">
表达式
varName = 'value';
只是将值'value'
赋值给变量"varName",该变量应在之前声明
所以
function a() {
var varName = 'a'
}
在本地声明变量varName
并用'a'
初始化它但是
function b() {
varName = 'b'
}
只是将值CCD_ 7分配给变量CCD_。但是变量CCD_ 8要在paren全局范围中声明。
它的所有含义都在这个代码中:
function myFunction() {
carName = "Volvo";
}
carName
在执行后存在于myFunction
外部的中,并且可供其他代码使用。鉴于:
function myFunction() {
var carName = "Volvo";
}
carName
仅存在于myFunction
内的,即使在调用之后也是如此。myFunction
外的代码看不到。
当您"声明"一个没有显式声明关键字(var/lit/const(的变量时,您的意图是引用一个可能在更高范围内的现有变量,还是声明一个新变量,这是有歧义的。JavaScript早期的大部分定义行为都是为了实现灵活性而尝试回退行为。当一个变量被分配给但没有现有引用时,它会返回到创建一个变量。如果没有任何声明关键字,就无法推断您的预期作用域在哪里,因此它会在全局作用域中创建它,以便其他可能的引用可以找到它
在您的情况下,当您调用函数时,它会引用一些变量。JavaScript不知道这是否意味着已经存在,所以它在全局范围内创建它。因此,在方法被调用后,它仍然在作用域内并且是可引用的。