函数里命名的变量
在函数里命名的变量是局部变量,也就是在函数外是读不到的:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
function f1(){
var a = 1;
}
console.log(a); //报错,读不到
</script>
</head>
<body>
<script>
console.log(a); //报错,读不到
</script>
</body>
</html>
那么他的特点可以由以下三个代码展示:
一:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
var a = 2;
function f1(){
var a = 1;
console.log(a); //显示:1
}
f1(); //这样fi()里的a就是在函数里的作用域了
console.log(a); //显示:2,读的是全局a
</script>
</head>
<body>
<script>
console.log(a); //显示:2,读的是全局a
</script>
</body>
</html>
更加验证了外面是读不到里面的a的,函数里面命名的a也没有干预到外函数面的a。
二:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
var a = 2;
function f1(){
a = 1;
console.log(a); //显示:1
}
f1(); //这样fi()里的a就是在函数里的作用域了
console.log(a); //显示:1,f1()里的a没有声明,这样就把全局的a给改了
</script>
</head>
<body>
<script>
console.log(a); //显示:1
</script>
</body>
</html>
在这里,函数体里的a这样表示,则表示的就是读写全局变量的a。
三:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
const a = 2;
function f1(){
a = 1; //报错
console.log(a); //不显示
}
f1(); //报错
console.log(a); //不显示
</script>
</head>
<body>
<script>
console.log(a); //能显示
</script>
</body>
</html>
这种情况就是const声明的特性啦,也是不能改写。
以上就是我总结的javascript的变量作用域范围和牛角尖的情况,只是想借自己的思考帮助初学者能更好的理解这个基础,仅仅讨论了这个范围,并没有太深入,如有大佬有什么指导意见欢迎指出哦。