栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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


编辑:对于其中也包括一些ES6声明(概述

let
const
):https://developer.mozilla.org/en-
US/docs/Web/Javascript/Reference/Scope_Cheatsheet

这种奇怪的行为取决于

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

这是一些例子。

bar(); //This won't throw an errorfunction bar() {}foo(); //This will throw an errorvar 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 intovar foo; //Insanity! It's now at the topfunction 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 tofunction 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()
,这会引发错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416084.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号