hoisting相关内容

JAVASCRIPT:未定义++的结果是NaN,不是未定义?

第一个console.log输出为2。毫无疑问。 但是为什么第二个console.log输出不是未定义的呢?不应该先输出未定义的,然后变量b变成NaN吗? var a = 2; console.log(a++); var b; console.log(b++); 推荐答案 考虑一下: 数据-lang=“js”数据-隐藏=“假”数据-控制台=“真”数据-巴贝尔=“假”> ..
发布时间:2022-08-06 13:56:10 前端开发

Javascript函数作用域和提升

我刚刚阅读了 Ben Cherry 撰写的一篇关于 JavaScript 范围界定和提升的精彩文章 他举了以下例子: var a = 1;函数 b() {a = 10;返回;函数 a() {}}b();警报(一); 使用上面的代码,浏览器会提示“1". 我仍然不确定它为什么返回“1".他说的一些事情浮现在脑海中,例如:所有函数声明都被提升到顶部.您可以使用函数作用域变量.仍然没有为我点击 ..
发布时间:2022-01-29 22:49:46 前端开发

JavaScript 中的内部函数会被提升吗?范围规则如何适用于它们?

我认为 JavaScript 没有块作用域,而是函数作用域,并且声明从它们的块提升到其父函数的顶部. 但是,以下代码没有按预期工作: function one(a) {console.log("一个叫" + a);如果 (a == 1) {函数内部(b){console.log("内部调用" + b);}内部(123);}内部(456);}一(1);一(2);一(3); 第一个 one( ..
发布时间:2022-01-04 11:35:19 前端开发

为什么 catch 子句有自己的词法环境?

考虑以下摘录 来自 ECMA-262 v5.1(我最近看到在这个问题中: 词法环境是一种规范类型,用于根据 ECMAScript 代码的词法嵌套结构定义标识符与特定变量和函数的关联.词法环境由环境记录和对外部词法环境的可能为空的引用组成.通常,词法环境与 ECMAScript 代码的某些特定句法结构相关联,例如 FunctionDeclaration、WithStatement 或 TryS ..
发布时间:2022-01-04 11:22:17 前端开发

在浏览器中为单个网页执行多少个 JavaScript 程序?

JavaScript 程序由语句和函数声明组成.当一个 JavaScript 程序被执行时,会发生以下两个步骤: 扫描代码以查找函数声明和每个 func.声明被“执行"(通过创建函数对象)并创建对该函数的命名引用(以便可以从语句中调用该函数) 语句按顺序执行(评估)(正如它们在代码中出现的那样) 因此,这工作得很好: 富();函数 foo() {返回;} 虽然“foo"函数在 ..
发布时间:2021-12-25 11:55:16 前端开发

是否提升了 ES6 模块导入?

我知道在新的 ES6 模块语法中,JavaScript 引擎不必评估代码来了解所有的导入/导出,它只会解析它并“知道"要加载什么. 这听起来像是在吊装.ES6 模块被吊起了吗?如果是这样,它们会在运行代码之前全部加载吗? 这个代码可以吗? 从'externalModule1'导入myFunc1;myFunc2();如果(Math.random()> 0.5){从“externalMo ..
发布时间:2021-12-23 11:46:31 前端开发

const 和 let 会使 IIFE 模式变得不必要吗?

据我所知,IIFE 模式是解决 ES5 及以下无法创建块作用域这一事实的方法.通过将所有内容包装在一个函数中并立即调用它,我们可以创建一个作用域. 既然 let 和 const 将获得更多浏览器的支持,这是否减少了对 IIFE 模式之类的需求? 解决方案 是的,块将取代 IEFE,只要块作用域声明 (函数、let/const/class) 被广泛采用.您需要一个范围,例如关闭?这里有 ..
发布时间:2021-12-23 11:35:52 前端开发

当 JavaScript 变量名和函数名相同时会发生什么?

我有以下代码,我在其中声明了一个函数,并在它之后声明了一个与该函数同名的变量: function a(x) {返回 x * 2;}变量 a;警报(一); 我希望这会提醒 undefined,但如果我运行它,警报将显示以下内容: 函数a(x){ 返回 x * 2 } 如果我为变量赋值(例如 var a = 4),警报将显示该值(4),但没有此更改 将被识别为函数. ..
发布时间:2021-12-07 23:31:39 前端开发

Javascript 函数作用域和提升

我刚刚阅读了 Ben Cherry 撰写的关于 JavaScript 范围和提升的精彩文章 其中他给出了以下示例: var a = 1;函数 b() {一 = 10;返回;函数 a() {}}b();警报(一); 使用上面的代码,浏览器会提示“1". 我仍然不确定为什么它返回“1".他说的一些事情浮现在脑海中,例如:所有的函数声明都被提升到顶部.您可以使用函数作用域变量.仍然没有为我点击 ..
发布时间:2021-11-30 22:17:10 前端开发

同名的变量和函数在块内返回错误

如果我们声明一个变量和一个同名的函数,就是接受重新声明.但是当我们在一个块内做同样的事情时,它会显示重新声明错误. 代码: var x;函数 x() {};//没有错误. 但在这种情况下,我收到错误. {内部变量;//重新声明错误.函数内(){};} 预期结果应该没有错误. 解决方案 这是 EcmaScript 6 的更改.从 ES6 开始,它不再允许在块范围内有重复的绑 ..
发布时间:2021-09-16 18:31:05 前端开发

Javascript 时间死区

我真的不明白下面的代码片段发生了什么. 我预计会因为 Temporal Dead Zone 而出现错误,但看起来 const baz = '123123'; 被提升了. 一切正常的原因是什么? class Foo {构造函数(){console.log('Foo baz 是:', baz)}}函数日志(){console.log('log baz is:', baz);}cons ..
发布时间:2021-07-16 21:38:11 前端开发

JS 提升如何与块语句一起使用?

在下面的这段代码中,我只想了解为什么 console.log(abc in this); 是 print true ,但在下一行 console.log(abc); 获取 undefined console.log(this.abc);//未定义console.log(abc in this);//trueconsole.log(abc);//未定义{函数 abc(){console.log(" ..
发布时间:2021-07-16 21:37:55 前端开发

函数提升和返回语句

我希望这个(为了示例而减少)函数可以顺利运行,但由于 fn2 未定义而失败: void function(){var var1 = fn1();var var2 = fn2();函数 fn1(){};返回函数 fn2(){};}(); return 语句如何从提升中排除 fn2 的函数表达式? 解决方案 仅提升使用函数声明创建的函数.return function fn2(){}; 中 ..
发布时间:2021-07-16 21:34:01 前端开发

作为原型添加到 JS 对象的属性会被提升,而原型函数则不会

我(或者至少我认为我)非常熟悉 JavaScript 中的提升. 考虑以下陈述: 函数声明将与其主体一起提升,而函数表达式则不会;只会提升 var 语句. “函数声明和函数变量总是被 JavaScript 解释器移动(‘提升’)到它们的 JavaScript 作用域的顶部" - Berry Cherry 现在考虑以下函数: function User() {this.na ..
发布时间:2021-06-22 20:06:39 前端开发

吊装和可变范围

有人会帮助解释为什么下面的两个代码片段打印出不同的结果吗? 区别在于条件语句内.在第一个中,有一个名为'Jack'的局部变量分配给name,条件是真实的(意味着!name的值为true).在第二个中,为全局变量名称分配了相同的名称"Jack",但条件是虚假的(!name为false).我的问题是,如果其他所有条件都相同,那么如果在条件主体内部 进行了更改,为什么第一个条件为true,而第二个 ..
发布时间:2021-05-19 21:00:53 前端开发

Javascript变量和函数吊起

大卫谢里夫进行了一个JS测验,看上去很像- var foo = 1;功能栏(){返回foo;foo = 10;函数foo(){}var foo = 5;}typeof bar();//? 据我了解,函数首先被放置,然后在内部声明变量.函数的hosite形式类似于(如果我错了,请纠正我)- var foo = 1;功能栏(){函数foo(){}var foo;返回foo;foo = 10 ..
发布时间:2021-05-19 20:39:13 前端开发

JavaScript变量吊装说明

我遇到了以下有关javascript中的变量提升的文章.本文总结了以下三点. 1.在执行代码的任何部分之前,所有声明(函数和变量)都将提升到包含范围的顶部.2.首先提升功能,然后提升变量.3.函数声明的优先级高于变量声明,但优先于变量分配. 站点点 var showState = function(){console.log("Idle");};函数showState(){consol ..
发布时间:2021-05-19 20:20:29 前端开发