【发布时间】:2012-08-30 12:05:58
【问题描述】:
我正在阅读此article,我有一些问题请:
考虑到这段代码:
1: var a = 1;
2: function b () {
3: a = 10;
4: return;
5: function a() {}
6: }
7: b();
8: alert(a);
这会提醒 1。(我的问题是为什么?)
文章陈述了它与名称解析的相关性。
名称解析(根据文章)按此顺序确定:
1. Internal mechanisms of language: for example, in all scopes are available “this” and “arguments”.
2. Formal parameters: the functions can be named as the formal parameters, which scope is limited to the function body.
3. Function declarations: declared in the form of function foo() {}.
4. Variable declarations: for example, var foo;.
第 3 行假设更改全局 a 的值。 但是函数 a(){...} 优先于内部声明(如果我理解正确的话) 这就是为什么警报 1
附言如果我删除第 5 行,它会提醒 10。
一般来说,如果一个名字已经被定义,它就永远不会被重新定义 由另一个具有相同名称的实体。那就是函数声明 具有相同的变量声明的优先级 姓名。但这并不意味着变量赋值 不替换函数,只是忽略它的定义。
我不明白那部分:
但这并不意味着变量赋值 不替换函数
请回答两个问题:
我是否正确理解了提醒1的原因
以上行是什么意思? (被误解的部分)
谢谢。
【问题讨论】:
-
我知道这不是一个答案,但我们不能只给函数和变量起正确的名字,而不用担心在虚构的情况下会发生什么吗?
-
@jbabey 有些人喜欢更深入地研究事物,以了解它们在不同场景中的工作方式。这是其中之一。名称在这里并不重要。这只是一个例子。
-
我很抱歉,Royi,发布了同一篇文章。感谢您让我注意到这一点。
标签: javascript hoisting