<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function function1() {
console.log("function1");
function2();
return 1;
}
function function2(){
console.log("function2")
}
console.log(function1);//直接打印方法名,会把函数代码以字符串方式打印出来
/*执行函数,会执行方法中的代码并返回一个返回值
如果方法中包含了其他方法,会按照顺序执行
执行到调用其他方法的位置时会将调用的方法执行完毕再继续执行后续代码*/
function1();//输出结果,先输出function1,再输出function2
console.log("----------");
var a = function1();//调用并取得返回值,将返回值存入变量a
console.log(a);
var b =function1;//函数名赋值给其他变量表示把整个函数赋值给其他变量使用
console.log(b);
console.log("----------");
/*变量作用域:变量生效的范围
全局作用域,定义在函数外,script标签范围内,整个页面都可以使用
局部作用域,定义在函数内,仅在函数内部使用,也叫做局部变量
*/
var x = 1;
function function3() {
var i = 1;
console.log(x + i);//输出2
var q =5,w=6;//逗号表示并且,此行代码相当于var q = 5; var w = 6;
var e = r =5;//表示创建局部变量e=5,创建隐式全局变量r=5;
j = 10;// //函数内不使用var声明的变量是隐式全局变量,不推荐使用
}
//console.log(x+i); 变量ide 作用域在function3范围内,此行代码报错
function3();
console.log(j);//先调用方法,则隐式全局变量正常输出,后调用方法或未调用方法此行代码报错
console.log(r);
console.log("----------");
/*变量和函数提升
变量和函数是存储数据的,代码运行前会将变量和函数提升,方便调用,既可以先调用后定义
变量提升规则:会将变量提升到作用域的第一行,但只提升变量名称,
如果先调用不会报错但值为undefined,隐式变量不存在提升
函数提升规则:函数提升到作用域的第一行,可以提前调用,可以调用的范围增大
变量表达式声明的函数是按照变量提升规则进行提升,因此不能提前调用 */
console.log(p);
var p = 50;
function4();
//function5();//变量表达式声明的函数提前调用报错
function function4(){
console.log("function4");
}
var function5 = function () {
console.log("function5");
}
function5();
</script>
</body>
</html>
JS基础:变量作用域&变量函数提升
最新推荐文章于 2024-05-30 13:59:14 发布