JavaScript解释器如何解释代码?

问题描述 投票:1回答:3

我试图了解浏览器如何解释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)如果有人可以从头到尾解释此代码,我将不胜感激。

javascript syntax interpreter
3个回答
4
投票

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。在代码中,为参数分配了新值,然后将这些新值连接并返回,但是调用代码将忽略函数的返回值。]


2
投票
var fName = "John";
var lName = "Snow";

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.