JavaScript解释器如何解释代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript解释器如何解释代码?相关的知识,希望对你有一定的参考价值。

我试图了解浏览器如何解释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时,会将它们创建为局部范围变量,如果可以,为什么不允许在()中使用var关键字。

3)如果有人可以从头到尾解释此代码,我将不胜感激。

答案

1)解释代码后,引擎首先分配内存吗首先从上到下的变量,然后分配值然后还是同时逐行完成两个操作?

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

变量的创建和分配是分开的。代码中定义的所有变量都在代码启动之前存在。您可以为在代码中进一步定义的变量分配一个值(但是很容易造成混淆)。示例:

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

2)在函数myName中,当声明了fName和lName时,它们是创建为局部作用域变量,如果是,为什么不允许使用它()中的var关键字。

函数中定义的参数在函数中创建为局部变量。好像参数有一个隐式var,因此它不是必需的(不允许)。

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

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

3)如果有人可以解释此代码,我将非常感谢从上到下解释。

执行代码时,代码从上到下运行。为全局变量分配了它们的值,该函数作为定义被跳过,然后对全局变量求值并忽略结果,然后调用该函数。

在函数中,将创建参数并为其分配发送到其中的值。由于您不发送任何值,因此它们将具有值undefined。在代码中,为参数分配了新值,然后将这些新值连接并返回,但是调用代码将忽略函数的返回值。]

另一答案
var fName = "John";
var lName = "Snow";
另一答案

首先,JavaScript是一种松散类型的语言,这意味着无论该语句期望使用哪种数据类型,JavaScript都会自动将数据转换为该类型。当值分别初始化为各个字符串,数组,对象等时,JavaScript会分配内存。

以上是关于JavaScript解释器如何解释代码?的主要内容,如果未能解决你的问题,请参考以下文章

用下面的代码解释一下javascript中var和let关键字的区别

JavaScript解释器如何解释代码?

有趣的 C++ 代码片段,有啥解释吗? [复制]

需要对特定 R 代码片段的解释

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]

JavaScript 是如何运行的?