JavaScript解释器如何解释代码?

How JavaScript interpreter interpret code?

我想了解 javaScript 是如何被浏览器解释的。我有以下代码

var fName = "John";
var lName = "Snow";

function myName (fName, lName) {

  fName = "Sam";
  lName = "Doe";

  return fName + ' ' + lName;

}

fName;
lName;
myName();

问题

1) 解释代码时,引擎是先从上到下为变量分配内存,然后赋值,还是同时逐行进行?

2) 在函数 myName 中,当 fNamelName 被声明时,它们是否被创建为局部作用域变量,如果是,为什么不允许在().

3) 如果有人能解释一下这段代码是如何从上到下解释的,我将不胜感激。

var fName = "John";
var lName = "Snow";

window 范围内创建两个变量,基本上是全局变量。正在 fNamelName.

function myName (fName, lName) {

  fName = "Sam";
  lName = "Doe";

  return fName + ' ' + lName;

}

这里的变量是参数(fName, lName),作为局部变量处理,但参数不需要var定义,不同于全局变量fNamelname.

fName; // "John"
lName; // "Snow"
myName(); // "Sam Doe"

1) When the code is interpreted does the engine first allocates memory for the variables from top to bottom first and then assign the values then or in the same time both operations are done by line by line?

解析代码时,会创建定义的全局标识符(fNamelNamemyName)。该函数已创建并分配给它的标识符,但变量尚未分配任何值。

变量的创建和赋值是分开的。代码中定义的所有变量在代码开始之前就已经存在。您可以为在代码中进一步定义的变量赋值(但这很容易混淆)。示例:

fName = "John";
lName = "Snow";
var fName, lName;

2) In function myName when fName and lName are declared does they are created as local scope variables, if yes why it is not allowed to use var keyword in the ().

函数中定义的参数在函数中创建为局部变量。就好像参数有一个隐式的var,所以不需要(也不允许)。

您可以通过声明局部变量并为其分配参数值来获得基本相同的效果:

function myName() {
  var fName = arguments[0];
  var lName = arguments[1];
  ...

3) I would really appreciate it if someone could explain how this code is interpreted top to bottom.

执行代码时,代码从上到下运行。为全局变量赋值,函数被跳过,因为它是一个定义,然后计算全局变量并忽略结果,然后调用函数。

在函数中创建参数并分配您发送给它的值。由于您不发送任何值,因此它们的值为 undefined。在代码中,参数被分配了新值,然后这些新值被连接起来并 returned,但是函数中的 return 值被调用代码忽略。

首先,JavaScript 是一种松散类型语言,这意味着无论语句期望数据类型是什么,JavaScript 都会自动将数据转换为该类型。 JavaScript 在将值初始化为相应的字符串、数组、对象等时分配内存...

var a = 123;   //Allocates memory for number
var b = "program"   //Allocates memory for string

当您创建一个带有参数的函数时,这些参数被视为局部变量,您也可以在创建参数时初始化这些值。

在从上到下执行该代码段之前。首先,您应该了解解释器的工作原理。 "解释器逐句检查程序的错误。检查完一条语句后,它将该语句转换为机器代码,然后执行该语句。该过程一直持续到程序的最后一条语句出现。" 1. 为两个全局变量分配的第一个内存 2.功能被跳过 3. 最后函数被调用并且 returns 值 请查看此 Loupe visualisation 以了解 JavaScript 的调用 stack/event loop/callback 队列如何相互交互