请用javascript自动解释全局



我无法理解自动全局背后的想法。我正在阅读以下内容: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不知道这是否意味着已经存在,所以它在全局范围内创建它。因此,在方法被调用后,它仍然在作用域内并且是可引用的。

最新更新