概念
- 在 JavaScript 中, 作用域为可访问变量(包含对象和函数)的集合。
- 通俗讲,作用域就是起作用的范围。
- 在 JavaScript 中,函数是唯一拥有自身作用域的代码块。
在 JavaScrip 中有全局作用域和局部作用域
全局作用域
- 变量在函数外声明,即为全局变量,拥有全局作用域。
- 整个页面起作用,在<script>内都能访问到,可以在任何地方使用。
- 在全局作用域中有全局对象window,代表一个浏览器窗口,由浏览器创建,可以直接调用。
- 全局作用域中声明的变量和函数,会作为window对象的属性和方法保存。
- 全局变量在页面打开时创建,这个作用域会一直存在,直到页面关闭后才销毁。
局部作用域
- 变量在函数内声明,即为局部变量,拥有局部作用域。
- 局部作用域内的变量只能在函数内部使用,所以也叫函数作用域。
- 局部作用域就是在全局作用域的里面又开辟出一个相对小的作用域。
- 每一个函数,都是一个局部作用域。
- 在 js 中只有函数能生成一个局部作用域。
- 局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。
案例1
<script>
var a = 123; //全局变量
function fn() {
console.log(a); //123
}
fn();
console.log(a); //123
</script>
案例2
<script>
var a = 123; //全局变量
function fn() {
var b = 456; //局部变量
console.log(b); //456
console.log(a); //123(函数内部可访问全局变量)
}
fn();
console.log(b); //b is not defined(无法访问函数内部变量)
console.log(a); //123
</script>
在 javascript 中变量的使用规则:
- 可以直接给一个未声明的变量赋值(自动定义为全局变量),但不能直接使用未声明的变量,直接使用会报错。
- 因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
- 当全局与局部有同名变量的时候,访问该变量将遵循 "就近原则"(优先使用局部变量)。
在 javascript 中显示声明与隐式声明的区别:
- 显式声明:有 var 关键字声明,作用域按正常情况,在全局声明就是全局变量,在局部声明就是局部变量。
- 隐式声明:没有 var 关键字声明,在全局和局部直接赋值,都是全局变量。
案例
<script>
fn( );
console.log(c); //9
console.log(b); //9
console.log(a); //a is not defined(没有声明变量,直接使用就报错)
function fn(){
var a=b=c=9;
//c = 9; (隐式声明,自动定义为全局变量)
//b = c; (隐式声明,自动定义为全局变量)
//var a = b; (显式声明,局部变量)
console.log(a); //9
console.log(b); //9
console.log(c); //9
}
</script>
本文地址:https://blog.csdn.net/Lucky_hanmei/article/details/107284378
如对本文有疑问, 点击进行留言回复!!
同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!
【JavaScript笔记(一)】万丈高楼平地起 - 基本概念篇
轻松解决 org.apache.taglibs.standard.tlv.JstlCoreTLV 困惑
网友评论