console.log( a ); var a = 2;
执行输出
a = 2; var a; console.log( a );
执行输出2
说明:javaScript 运行时在编译器阶段会最先处理var a;
foo();
function foo() {
console.log( a ); // undefined var a = 2;
var a = 2;
}
执行输出undefined,执行foo();时找到了函数的声明,但实际代码写在foo()的后面。说明函数声明会被提升,函数作用域里变量也会被提升
foo();
var foo = function bar() {
console.log(a)
var a =2
};
执行输出
var foo;
foo(); // 1
foo = function() {
console.log( 2 );
};
function foo() {
console.log( 1 );
}
执行输出1,说明虽然函数和变量都能被提升,但是函数声明提升优先于变量声明提升
foo(); // 3
function foo() {
console.log( 1 );
}
var foo = function() {
console.log( 2 );
};
function foo() {
console.log( 3 );
}
执行输出3
console.log(a) let a=2
输出:
{
let x = 1
x = 2
}
1、查找let声明的变量x,并在作用域中创建变量,不进行初始化
2、执行代码x=1
执行x = 2
let 特性
let a=2 let a=3 console.log(a)
输出:SyntaxError: Identifier ‘a‘ has already been declared
【你不知道的javaScript 上卷 笔记3】javaScript中的声明提升表现
原文:https://www.cnblogs.com/seny-33/p/12191431.html