2

我很好奇是否有人可以解释 Javascript 在幕后是如何工作的。在这种情况下,搜索变量。假设您有 50 个变量分布在您的项目过程中,例如,在这里我将枚举变量:

var one;
var two;
var three;
//...
var fifty;

我的问题是,如果我要调用第四十三个变量,它会开始从上到下搜索您的变量直到找到它吗?那么在这种情况下,它会搜索 42 个其他变量,直到找到 43 个?如果是这样,在顶部定义最常用的变量不是更好的做法吗?如果这个理论是完全错误的,而且也可能是,那么还有其他人知道它是如何工作的吗?

在此先感谢您的帮助,对于完全随机的问题,我们深表歉意。再次感谢。

4

4 回答 4

2

您所要求的内容是口译员内部的。Javascript 引擎很可能有一个表,它可以通过变量标识符查找地址。那将是我的猜测。如果您想进一步研究它,您可能会找到一些 javascript 解释器源代码来查看它如何查找变量标识符。

于 2013-05-31T19:50:30.037 回答
2

“如果我要调用第四十三个变量,它会开始从上到下搜索您的变量直到找到它吗?” -,变量不存储为列表,Javascript 编译器会将这些引用存储在当前执行上下文的激活对象中。这些将被组织在一个映射结构中,因此对特定变量的查找将不需要遍历变量集合。(话虽如此,当我们从一种低级机器语言(低于 C 语言,可以说从映射中检索引用实际上确实需要一些迭代......)

至于简单的答案:

Javascript 做了一些叫做变量提升的事情。不管它写在哪里(在相同的范围/功能中),它都会被提升到顶部并分配undefined.

function foo() {
    bar();
    var x = 1;
}

实际上是这样解释的:

function foo() {
    var x;
    bar();
    x = 1;
}

有关更多说明,请参见:http: //www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

于 2013-05-31T19:42:28.867 回答
1

在哪里定义 JavaScript 变量唯一重要的是函数作用域。当浏览器的 JS 引擎解析你的代码时,它会自动将变量定义提升到当前作用域的顶部。

(function(){
    console.log(somevar); // undefined
    var somevar = 1;
})();

实际上与以下内容相同:

(function(){
    var somevar;
    console.log(somevar); // undefined
    somevar = 1;
})();
于 2013-05-31T19:46:45.147 回答
0

当你有一个var语句列表时,顺序是无关紧要的。当您在程序中引用一个变量时,它的值会直接按名称检索。

最佳实践是在函数顶部声明所有变量,因为在 JavaScript 中,变量在整个函数范围内定义,即使它们对应的var语句出现在函数底部。

于 2013-05-31T19:46:33.003 回答