处理javascript代码时的困惑

Pra*_*wal 1 javascript

function hi() {
    myvar = 'local variable';
}
console.log(myvar);
Run Code Online (Sandbox Code Playgroud)

输出:ReferenceError:未定义myvar

根据我的理解,javascript逐行,检查变量及其范围.记住这一点不应该是以下打印'undefined',因为myvar存在于全局范围内?

Mat*_*ava 5

不,它不应该,因为它打印undefined你需要首先在全局范围内定义它.

在函数本身执行之前,在函数内部为该变量赋值的事实并不意味着什么.

var myvar;

function hi() {
    myvar = 'local variable';
}
console.log(myvar);
Run Code Online (Sandbox Code Playgroud)

如果在var myvar;执行hi之前省略该行并执行函数console.log,则会得到"local variable"结果,因为该函数会创建隐式全局绑定.

要检查这一点,只需使用strict mode,您将得到错误而不是上面的结果,因为严格模式会阻止隐式全局变量.

"use strict";

function hi() {
    myvar = 'local variable';
}

hi();

console.log(myvar);
Run Code Online (Sandbox Code Playgroud)