javascript之作用域一(理解作用域)
网上关于JS的变量和作用域的文章有很多,但真正能讲清楚,能深入理解的文章很少。在阅读了很多人的文章以后,我决定综合起来,结合实际代码,会不断丰富提炼总结更新,希望能够以一个比较清楚完整的方式让大家真正理解。直接撸起袖子,开始干吧。
一、JavaScript 作用域
1. 作用域是可访问变量的集合
在 JavaScript 中, 对象和函数同样也是变量。因此,作用域为可访问变量,对象,函数的集合。 JavaScript 函数作用域: 作用域在函数内修改。
作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。 可以理解为:只会对某个范围产生作用,而不会对外产生影响的封闭空间。在这样的一些空间里,外部不能访问内部变量,但内部可以访问外部变量。
2. JavaScript 作用域分为:局部作用域和全局变量
变量在函数内声明,变量为局部作用域。局部变量:只能在函数内部访问。局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所以在一些地方会把这种作用域成为函数作用域。
变量在函数外定义,即为全局变量。 全局变量有全局作用域, 网页中所有脚本和函数均可使用。 任何地方都能访问到的对象拥有全局作用域。
局部变量和全局变量的例子
// 此处不能调用 carName 变量
function myFunction() {
var carName = "Volvo";// 函数内可调用 carName 变量
}
如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
// 此处可调用 carName 变量
function myFunction() {
carName = "Volvo";// 此处可调用 carName 变量
}
注意: 全局作用域的几种情况:
- 函数外面定义的变量拥有全局作用域
- 未定义直接赋值的变量自动声明为拥有全局作用域
- window对象的属性拥有全局作用
3.JavaScript 变量生命周期
1). JavaScript 变量生命周期在它声明时初始化。 2). 局部变量在函数执行完毕后销毁。 3). 全局变量在页面关闭后销毁。
4. 注意
1). 函数参数只在函数内起作用,是局部变量。 2). 在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。
//此处可使用 window.carName
function myFunction() {
carName = "Volvo";
}
作用域是在函数定义时就确定的,而非调用时确定
转载自:https://juejin.cn/post/6844903919789801485