本文深入解析 JavaScript 中的作用域链机制,阐述全局变量与 window 对象的关系,以及局部作用域在函数执行后的销毁规则。重点分析闭包对局部变量的保护机制,并通过代码示例说明变量声明提升(Hoisting)导致的 undefined 现象,帮助开发者理解变量生命周期与访问权限。
JavaScript 作用域链与变量声明机制解析
本文实例为大家分享了 JS 作用域链的相关内容,供大家参考,具体内容如下
全局作用域与 window 对象
在 JavaScript 中,所有全局变量和函数都会作为 window 对象的属性和方法被创建。
局部作用域与闭包机制
当某个函数执行完毕,其对应的局部作用域即被销毁,其中保存的变量和函数定义也随之消失,这构成了局部作用域的基本特征。然而,闭包机制可以防止局部变量被销毁,使其在外部仍可访问。
此处提到的“销毁”,指的是当函数再次被调用时,其内部变量会重新初始化并回到最初的状态。
var color = "blue";
function changeColor(){
var anothercolor = "red";
if(color==="blue"){
color = anothercolor;
}
//这里可以访问anothercolor,color
}
//这里只可以访问color
changeColor();
console.log(color);//red
console.log(anothercolor);
// undefined。anothercolor是函数changeColor的局部变量,在整个函数运行之后已经被“销毁”
变量声明与提升特性
关于变量声明,需要注意以下关键点:
function ddq(){
alert(i)
var i=11
alert(i)
}
ddq()
// 第一个返回underfind
//第二个返回11
这段代码相当于
function ddq(){
var i
alert(i)
i=11
alert(i)
}
ddq()
需要注意的是,在函数内部声明变量时(特别是在调用之后声明),其行为等同于先进行变量声明,随后再赋值。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。