84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
var a = 1;
function a() { console.log(a); }; a();
Diese JS-Codezeilen melden beim Ausführen einen Fehler, aber was ist der Grund? Bitten Sie Gott um eine Erklärung
函数做为javascript的第一公民,所以在此处存在函数提升。上述代码最后的实现和以下效果是一样的
function a() { console.log(a); }; var a = 1; a();
这样会导致原有的函数名被覆盖。
标识符重复了啊 你已经给a声明成一个变量了
首先说一点 js 看到 var a = 1 是 分两步来解析,第一 把var a 提升到当前作用域顶端,然后依次往下解析,知道a = 1 开始赋值
这就是 变量 跟 函数重名的问题, 简单来说 js引擎解析顺序是这样的 1.变量个函数声明提升到当前作用域顶端 → var a ↑ 和 `function a(){
console.log(a);
}`2.然后解析剩下的代码 `a=1;a()`,
这是因为函数声明会提前
var a = 1; function a() { console.log(a); }; a();
1)函数声明会置顶2)变量声明也会置顶3)函数声明比变量声明更置顶:(函数在变量上面)4)变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置5)声明过的变量不会重复声明
就会相当于下面的这个样子
var a = function () { console.log(a); }; var a = 1; a();
希望帮到你~
很多人都提到了是变量提升的问题,但解释的不太对。var提升是拆开来提升的,函数是整个提升的。FYI
var
所以应该是这个样子:
var a; function a () { console.log(a); }; a = 1; a();
函数做为javascript的第一公民,所以在此处存在函数提升。上述代码最后的实现和以下效果是一样的
这样会导致原有的函数名被覆盖。
标识符重复了啊 你已经给a声明成一个变量了
首先说一点 js 看到 var a = 1 是 分两步来解析,第一 把var a 提升到当前作用域顶端,然后依次往下解析,知道a = 1 开始赋值
这就是 变量 跟 函数重名的问题, 简单来说 js引擎解析顺序是这样的
1.变量个函数声明提升到当前作用域顶端 → var a ↑ 和 `function a()
{
}`
2.然后解析剩下的代码 `a=1;
a()`,
这是因为函数声明会提前
1)函数声明会置顶
2)变量声明也会置顶
3)函数声明比变量声明更置顶:(函数在变量上面)
4)变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置
5)声明过的变量不会重复声明
就会相当于下面的这个样子
希望帮到你~
很多人都提到了是变量提升的问题,但解释的不太对。
var
提升是拆开来提升的,函数是整个提升的。FYI所以应该是这个样子: