<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>函数--函数提升与变量提升</title>
</head>
<body>
<script>
/*
javascript函数--函数提升与变量提升
*/
/*
1.作用域
1.1.全局作用域
1.2.函数作用域
1.3.块级作用域
2.变量提升
3.函数提升
*/
//1.作用域
/*
JS中一个变量定义和调用都会是在一个固定的范围中,这个范围就叫做作用域。
作用域分为全局作用域、函数作用域和块级作用域(es6)。
*/
//1.1 全局作用域
var a = 'global variable';//全局作用域变量
//1.2 函数作用域
function foo(){
var b = 'function variable';//函数作用域变量
console.log(a);//global variable
console.log(b);//function variable
}
//1.3 块级作用域
{
let c = 'block variable';//块级作用域变量
console.log(c);//block variable
}
// console.log(c);//报错!!
//2.变量提升
/*
变量提升是将变量声明提升到作用域顶部的位置,而变量的赋值不会被提升。
只有通过var关键字定于的变量才会产生提升。
*/
//1.1 全局作用域
//未赋值
console.log(aa)//undefined
//未定义
// console.log(ac)//Uncaught ReferenceError: ac is not defined
var aa = 'global variable';//全局作用域变量
//1.2 函数作用域
(function (){
var bb = 'function variable';//函数作用域变量
console.log(aa);//global variable
console.log(bb);//function variable
})();
//3.函数提升
/*
通过函数声明式定义的函数也会出现提升,也只有这一种函数。
函数提升会将整个函数体一起提升,包括了执行逻辑。
*/
console.log(foo());//foo函数!
function foo(){
return "foo函数!";
}
/*
以上函数执行时等替于:
function foo(){
return "foo函数!";
}
console.log(foo());//foo函数!
*/
</script>
</body>
</html>