先看题目
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、逐行解读代码
表达式(+ - * / % ++ -- ! 参数)可以修改预解析出来的值,函数声明不是表达式,函数调用也是局部的域