当前位置: 首页 > 面试题库 >

JavaScript函数顺序:为什么重要?

齐驰
2023-03-14
问题内容

原始问题:

当我的JavaScript调用的功能在页面下方而不是在调用页面的下方定义时,JSHint会抱怨。但是,我的页面是用于游戏的,在下载全部内容之前,不会调用任何函数。那么为什么订单功能出现在我的代码中很重要?
我在里面吟。看来我需要花另一天的时间才能重新排序六千行代码。使用javascript的学习曲线一点也不陡峭,但是非常糟糕。


问题答案:

tl; dr 如果在加载完成之前不调用任何东西,则应该没问题。

编辑:对于其中也包括一些ES6声明(概述letconst):https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Scope_Cheatsheet

这种奇怪的行为取决于

  1. 您如何定义功能以及
  2. 当您打电话给他们时。

这是一些例子。

bar(); //This won't throw an error
function bar() {}

foo(); //This will throw an error
var foo = function() {}



bar();
function bar() {
    foo(); //This will throw an error
}
var foo = function() {}



bar();
function bar() {
    foo(); //This _won't_ throw an error
}
function foo() {}



function bar() {
    foo(); //no error
}
var foo = function() {}
bar();

这是因为所谓的 吊装

有两种定义函数的方法:函数 _声明_和函数表达式。区别是烦人和微小,所以我们只说这有点错误:如果您像那样编写它function name(){},那是一个 声明 ,而当您像这样编写它varname=function(){}(或分配给返回的匿名函数,诸如此类)时,它就是函数
表达式

首先,让我们看一下如何处理变量:

var foo = 42;

//the interpreter turns it into this:
var foo;
foo = 42;

现在,如何处理函数 声明

var foo = 42;
function bar() {}

//turns into
var foo; //Insanity! It's now at the top
function bar() {}
foo = 42;

var声明“抛出”的 创作foo,以最顶端,但并不值分配给它。函数声明紧随其后,最后为分配了一个值foo

那呢?

bar();
var foo = 42;
function bar() {}
//=>
var foo;
function bar() {}
bar();
foo = 42;

只有 声明foo移动到顶部。分配仅在发出呼叫后bar进行,即所有吊装发生之前的位置。

最后,为简洁起见:

bar();
function bar() {}
//turns to
function bar() {}
bar();

现在,函数 表达式 呢?

var foo = function() {}
foo();
//=>
var foo;
foo = function() {}
foo();

就像普通的变量,首先foo宣布 在该范围内的最高点,然后将它分配一个值。

让我们看看第二个示例为什么引发错误。

bar();
function bar() {
    foo();
}
var foo = function() {}
//=>
var foo;
function bar() {
    foo();
}
bar();
foo = function() {}

正如我们之前所看到的,只foo悬挂的创建,而赋值则出现在“原始”(未悬挂)代码中。当bar被调用时,它之前foo被分配一个值,所以foo=== undefined。现在,在的功能体内bar,就好像您在做一样undefined(),这会引发错误。



 类似资料:
  • 我想使用数据框将熊猫数据框上传到大查询。调用函数。 我指定一个table_schema参数来强制BigQuery中的特定列顺序(这可能与Dataframe不同)。 所以我用例如: 数据帧中的列顺序是:Col1、Col3、Col4、Col5、Col2、Col6、Col7、Col8 工作做得正确。 但是当我检查Big Query中创建(或替换)destination_table的表模式时,列顺序是:C

  • 问题内容: 我认为Maven依赖关系的顺序之前无关紧要,并认为这是它的一个优点。这是我以前的依赖项: 它运作良好,今天我要把对弹簧的依赖移到最底层,以便与那些球衣相关的东西可以在一起。但是后来我再也无法正常工作了,我的码头抱怨道: 那真的很令人困惑,所以我是否需要考虑依赖顺序?我怎么知道正确的顺序? 问题答案: 依赖关系的顺序确实很重要,因为从2.0.9版开始,Maven如何解决传递依赖关系。文档

  • 我必须用一些代码来回答这个问题: 假设我编写了以下方法规范: 您正在为一个将使用此方法的数据库程序编写代码,并且希望专门处理每个程序。try/catch子句应该是什么样的 您可以对catch子句内容使用no-ops——空块{}<我们只对这里语句的语法和结构感兴趣。 我回答说: 出于这个原因,他没有接受这个答案: “你的catch子句顺序不对。你能解释一下为什么顺序很重要吗?” 他的回答正确吗?

  • 我理解,不可能用有限的位数来表示所有数字的任意精度,对浮点数进行天真的比较是不可取的。但我想,如果我把许多数字加在一起,我添加它们的**顺序**并不重要。 为了测试这个预测,我创建了一个随机数向量并计算它们的和,然后对向量排序并再次计算和。通常,这两个总数不匹配!这是我的代码(包含在下面)的一个问题,是浮点算法的一个缺点,还是可以通过切换编译器等来解决的问题。?

  • 问题内容: 为什么这些示例中的第一个不起作用,而其他所有示例都起作用? 问题答案: 这既不是范围问题,也不是关闭问题。问题在于 声明 和 表达式 之间的理解。 JavaScript代码(即使是Netscape的第一个JavaScript版本和Microsoft的第一个副本)也要分两个阶段处理: 阶段1:编译-在此阶段,代码被编译成语法树(字节码或二进制取决于引擎)。 阶段2:执行-然后解析解析的代

  • 问题内容: 我听说(在互联网上的某处阅读)比顺序IO快。它是否正确?如果是,那为什么会更快? 没有按顺序阅读。 已经从磁盘读取本身一样呢 映射区域不是顺序的-因此没有DMA(?)。 那么实际上应该比从文件慢吗?我上面的哪些假设是错误的? 问题答案: 我听说(在互联网上的某处阅读)mmap()比顺序IO更快。它是否正确?如果是,那为什么会更快? 可能是-有优点和缺点,如下所列。 当您真的有理由要关心