JavaScript 中的赋值是如何工作的?

问题描述 投票:0回答:2

有人问我,当我们给变量赋值时会发生什么?

意思是,假设我们有一个变量数据,并为其分配一些值,

var data = 5

后台到底发生了什么?数据的初始值是多少,会发生什么,如何分配值?

我尝试用谷歌搜索文章,但我找不到任何与工作相关的内容,可能是我没有使用正确的关键字。如果有人有任何我可以关注的文章或为我提供一些解释,那就太好了。

javascript variable-assignment variable-declaration
2个回答
3
投票

因为您使用的是

var
,所以名为
data
的变量首先由解释器在包含功能块的开头创建,此时它的初始值为
undefined
。 这种将声明移动到功能块开头的概念称为“变量提升”。 这个 data 变量将是解释器内部的一块内存。 它可能会在堆栈帧对象内分配。
吊装参考:

MDN 上的吊装

Javascript 提升基础知识

另请注意,函数声明如下:

function x() { // code here }

也被提升,因此同一作用域中的两个函数可以互相调用,而不必担心声明顺序。

当解释器执行到声明/赋值行所在的代码时,它将把

4

的值赋给变量。

所以,如果你的代码是这样的:

function myFunction() { var sum = 3 * 4; console.log(sum * 3); var data = 5; console.log(sum * data); } myFunction();

那么,解释器内部实际上做的是这样的:

function myFunction() { var sum = undefined, data = undefined; sum = 3 * 4; console.log(sum * 3); data = 5; console.log(sum * data); } myFunction();

事实上,你甚至可以编写这个(有点难看)的代码:

function myFunction() { var sum = 3 * 4; data = 6; // this will not be an error console.log(data); console.log(sum * 3); var data = 5; // the declaration of data is hoisted console.log(sum * data); } myFunction();

因为,这就是解释器处理的方式:

function myFunction() { var sum = undefined, data = undefined; sum = 3 * 4; data = 6; // this will not be an error console.log(data); console.log(sum * 3); data = 5; console.log(sum * data); } myFunction();

请注意,
let

const
是块作用域,而不是函数作用域,如果您尝试在声明之前引用它们,则会出现错误,而
var
允许您这样做。
var
有点遗留,很少(如果有的话)有理由再使用
var
。 使用
let
const
进行编码更安全。 如果您想要函数范围,您仍然可以将
let
const
放在函数的顶层。 但是,您通常应该在使用/需要的块中声明变量(将范围限制为仅需要的范围)。
    


0
投票

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