概述
1. JavaScript的变量分为两种
全局变量(Global variable):可以在脚本的任何位置被引用。
局部变量(Local variable):只存在于声明它的那个函数的内部,这个函数之外是无法引用的。
2. 关键字var设定了变量的作用域
- 使用var声明变量那么这个变量就是局部变量。JavaScript的全局变量是全局对象的属性。
当使用var声明一个变量时,这个变量时无法通过delete运算符删除的。如:
var m =1; //t是一个不可删除的全局变量
n = 2; //创建全局对象的一个可删除的属性
this.t = 3; //创建全局对象的一个可删除的属性
delete m//false:变量没有被删除
delete n//true:变量被删除了
delete this.t //true:变量被删除了
- 没有使用var就是一个全局变量。 如:
function square(num){
global = num * num; //global是一个全局变量
return global;
}
var local = 50; //local是一个局部变量
var number = square(20); //number是一个局部变量
alert(global); //结果:400
3.执行环境(execution context)
每个执行环境都有一个与之关联的变量对象,环境中定义的所有的变量和函数都保存在这个变量对象中。
4. 作用域链(scope chain)
JavaScript中每个函数都有一个执行环境,当代码在一个环境中执行时,就会创建变量对象的作用域链。
作用域链用途:保证对执行环境有权访问的变量和函数的有序访问。
如果这个环境是函数,则将其活动对象作为变量对象。
作用域链的前端,始终都是当期那执行环境的代码所在的变量对象。作用域链中的下一个变量对象来自包含(外部)环境,而在再下一个变量对象则是来自下一个包含环境,这样一直延续到全局执行环境。
全局执行环境的变量对象始终都是作用域链中的最后一个对象。
5. 作用域链组成
在JavaScript的最顶层代码,也就是不包含在任何函数定义内的代码,作用域链由一个全局对象组成。
在不包含嵌套的函数体内,作用域链上有两个对象:(1)定义函数参数和局部变量对象。 (2)全局对象。
在一个嵌套的函数体内,作用域链上至少有三个对象。
6. 理解作用域链
当定义一个函数时,它实际上保存一个作用域链,当调用这个函数时,它创建一个新的对象来存储它的局部变量,并将这个对象添加到保存它的作用域链上。
7. 作用域链访问
内部环境可以通过作用域链访问所在的外部环境,但是外部环境不能访问内部环境的任何变量和函数。
例如:
var color1 = "blue";
function changeColor(){
var color2 = "red";
function swapColor(){
var temp = color2;
color2 = color1;
color1 = temp;
//这里可以访问color1,color2,temp
//(即swapColor这个函数作用域内)
}
//这里可以访问color1,color2,但是不能访问temp
//(即在changeColor这个大函数的作用域内)
swapColor();
}
//这里只能访问color1 (即全局作用域)
changeColor();
最后
以上就是怕孤独铃铛为你收集整理的理解JavaScript的变量,变量作用域,作用域链的全部内容,希望文章能够帮你解决理解JavaScript的变量,变量作用域,作用域链所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复