Questions tagged «hoisting»

5
ES6中是否不使用let或const声明的变量?
Наэтотвопросестьответына 堆栈溢出нарусском:Всплываютлипеременные,объявленныеспомощью让ив常量ES6? 我玩ES6已有一段时间了,我注意到虽然用声明的变量var按预期悬挂了... console.log(typeof name); // undefined var name = "John"; ... 用提升声明let或const似乎有一些提升问题的变量: console.log(typeof name); // ReferenceError let name = "John"; 和 console.log(typeof name); // ReferenceError const name = "John"; 这是否意味着使用let或const不声明的变量被吊起?这到底是怎么回事?是否有任何区别let,并const在此问题?


18
Javascript函数作用域和提升
我刚刚读了本·切里(Ben Cherry)撰写的有关JavaScript作用域和提升的精彩文章,他提供了以下示例: var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); 使用上面的代码,浏览器将警告“ 1”。 我仍然不确定为什么它返回“ 1”。他说的一些事情让人想到:所有函数声明都被提升到顶部。您可以使用函数作用域变量。仍然没有点击我。

4
在浏览器中为一个网页执行了多少个JavaScript程序?
JavaScript程序由语句和函数声明组成。执行JavaScript程序时,将发生以下两个步骤: 将扫描代码以查找函数声明以及每个函数。声明是“执行的”(通过创建函数对象),并且创建了对该函数的命名引用(以便可以在语句中调用此函数) 语句按顺序执行(求值)(如代码中所示) 因此,这可以正常工作: <script> foo(); function foo() { return; } </script> 尽管“ foo”函数在声明之前被调用,但是它起作用,因为该函数声明是在语句之​​前求值的。 但是,这不起作用: <script> foo(); </script> <script> function foo() { return; } </script> 将引发ReferenceError(“未定义foo”)。得出这样的结论:网页HTML代码中的每个SCRIPT元素都代表一个单独的JavaScript程序,并且每当HTML解析器遇到SCRIPT元素时,它都会在该元素中执行该程序(然后执行该程序,解析器将转到SCRIPT元素后面的HTML代码)。 再一次,这确实可行: <script> function foo() { return; } </script> <script> foo(); </script> 我在这里的理解是,全局对象(在全局执行上下文中用作变量对象)一直存在(并保持),因此第一个JavaScript程序将创建函数对象并为其进行引用,然后第二个JavaScript程序将使用该引用来调用该函数。因此,所有JavaScript程序(在单个网页内)“使用”相同的Global对象,并且随后运行的所有JavaScript程序都可以观察到一个JavaScript程序对Global对象所做的所有更改。 现在,请注意... <script> // assuming that foo is not defined foo(); alert(1); </script> …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.