1.函数预解析
声明式的函数预解析时,整个函数将被提升到script标签内的最上面
赋值式的函数预解析时,将赋值的变量提升到script标签内的最上面,后面的赋值函数忽略
// 声明式
function qj() {
console.log("请进")
}
qj()
// 赋值式
var cq = function() {
console.log("出去")
}
cq()
变量预解析:将声明的变量提升至script标签内的最上面
console.log(a) //由于变量的预解析,所以此处打印的是undefined
var a = 10
console.log(a) //由于上面已经进行赋值,所以此处打印的是10
案例
function test() {
// 用来计算两个数的和
var result = 10 + 20
// console.log(result)
console.log(a)
return result
}
test()
console.log(test())
console.log(result)
当变量名与函数名重复是会出现报错
var b = 10
console.log(b)
//报错,原因是变量名与函数名重复
function b() {
console.log("aa")
}
b()
2.作用域:全局作用域和局部作用域
全局作用域:整个页面,只有当页面关闭时,全局作用域才会失效
局部作用域:全局作用域中又划分出小规范的作用域,函数内部可以创建局部作用域,到目前为止,也只有函数内部可以创建局部变量
全局变量可以在函数内部进行访问,但是函数内部定义的变量不能在函数外部进行访问
function test_1() {
var a = "ls" //变量采取的是就近原则
//console.log(a)
function test_2() {
a = "ww"
}
//console.log(a)
}
test_1()
// console.log(a)
function test_3() {
num = 100
}
test_3()
console.log(num) //自动转换成全局变量
var sum = 300