Tags
javascript
Created
Aug 3, 2018 10:12 AM
- var 声明变量时声明提前,并初始化成 undefined,赋值还在原来的位置。(let, const 声明时未进行初始化,不能使用)
- function 声明的函数体都会提前(可以在前面执行)
- Class 没有声明提前(相当于 let 定义)(Class 也可以用表达式定义)
var a = 0;
{
a = 1; // 赋值给下面的 function a
console.log(a, window.a); // 1,0
// 非严格模式可以在语句块定义函数
// 声明提前到语句块外面,函数体提前到块内最前面(且块内不能重新声明 var a),但和 var 一样执行到这里才将局部 a 的值赋值给外面的 a
function a() {}
console.log(a, window.a); // 1,1
}
foo();
var foo = 0;
function foo(){ console.log(1);}
foo = function(){ console.log(2);};
用 var 声明的变量和命名函数都会被提升到代码的最前面,只不过声明的变量的赋值语句在代码中的位置不变。所以上面这段代码应该被理解为:
var foo;
function foo(){ console.log(1);}
foo();
foo = 0;
foo = function(){ console.log(2);};