JavaScript 运行 订单问题

JavaScript running order questions

我有一个非常简单的Javascript代码,无法完全理解运行命令和输出。

function f1() {

    n = 999;

    change = function() {
        n = "Barry";
    };
    return change;

}

var result = f1();

result(); 
console.log(n)
change();
console.log(n)

输出:

Barry
Barry

据我了解,我定义了一个全局变量n,n = 999。 然后我创建一个函数,它将 globale n 定义为“Barry”。并将此功能分配给更改。 return 这个改变变量。

然后我触发这个f1(),并改变结果。在这个时间点,更改是一个函数,但尚未运行。

所以为什么第一个 Console.log return 我的 Barry?然后更改还没有运行..

您没有在 varletconst 范围内正确声明变量,因此污染了全局或外部范围。

n 已更改,因为 result === changechangen 设置为 Barry

此行为的原因在于这一行,

var result = f1(); // n - 999

此时您正在调用内部函数并将 n 设置为 Barry

result(); // n - Barry

我不知道你是怎么直接调用这个函数的。但希望它只是一个伪代码

change(); // n - Barry

也就是说,

 result() === change()

why the first Console.log return my Barry? Then change has not runs yet..

是的,您在调用 result() 之后才调用 console.log。尝试以下操作:

var n, change;
function f1() {

    n = 999;

    change = function() {
        n = "Barry";
    };
    return change;

}

console.log(n);
var result = f1();
console.log(result === change);
console.log(n);
result(); 
console.log(n);
change();
console.log(n);

当你调用结果函数时,这里是序列。

function f1(){
  //declares n variable
  //declares change function
  //return change function, and calls it, at this point it changes n to "barry".
}