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