先看题目
1、结果是 undefined
console.log(a)
var a = 1
复制代码
2、报错 Uncaught ReferenceError: Cannot access 'a' before initialization
console.log(a)
let a = 1
复制代码
3、报错 Uncaught ReferenceError: a is not defined
console.log(a)
a = 1
复制代码
4、结果 ƒ a() {a=4}、 1 、1、 3、 3
console.log(a)
var a = 1
console.log(a)
function a() {a=2}
console.log(a)
var a = 3
console.log(a)
function a() {a=4}
console.log(a)
复制代码
5、结果 ƒ a() {console.log(a=4)} 、 1 、1 、3 、3、 Uncaught TypeError: a is not a function
console.log(a)
var a = 1
console.log(a)
function a() {a=2}
console.log(a)
var a = 3
console.log(a)
function a() {console.log(a=4)}
console.log(a)
a()
复制代码
6、1
<script>
var a = 1
</script>
<script>
console.log(a)
</script>
复制代码
7、Uncaught ReferenceError: a is not defined
<script>
console.log(a)
</script>
<script>
var a = 1
</script>
复制代码
8、undefined、 1
var a = 1
function f() {
console.log(a)
var a = 2
}
f()
console.log(a)
复制代码
9、1、 2
var a = 1
function f() {
console.log(a)
a = 2
}
f()
console.log(a)
复制代码
10、undefined、1
var a = 1
function f(a) {
console.log(a)
a = 2
}
f()
console.log(a)
复制代码
11、1、1
var a = 1
function f(a) {
console.log(a)
a = 2
}
f(a)
console.log(a)
复制代码
浏览器解析过程
1、预解析
找 var function 参数,变量赋予undefined,function为整个函数块 script自上而下 函数由里到外
2、逐行解读代码
表达式(+ - * / % ++ -- ! 参数)可以修改预解析出来的值,函数声明不是表达式,函数调用也是局部的域