详解JavaScript 作用域
作用域是可访问变量的集合。
JavaScript作用域
在JavaScript中,对象和函数同样也是变量。
在JavaScript中,作用域为可访问变量,对象,函数的集合。
JavaScript函数作用域:作用域在函数内修改。
JavaScript局部作用域
变量在函数内声明,变量为局部作用域。
局部变量:只能在函数内部访问。
//此处不能调用carName变量
functionmyFunction(){
varcarName="Volvo";
//函数内可调用carName变量
}
因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。
JavaScript全局变量
变量在函数外定义,即为全局变量。
全局变量有全局作用域:网页中所有脚本和函数均可使用。
varcarName="Volvo";
//此处可调用carName变量
functionmyFunction(){
//函数内可调用carName变量
}
如果变量在函数内没有声明(没有使用var关键字),该变量为全局变量。
以下实例中carName在函数内,但是为全局变量。
//此处可调用carName变量
functionmyFunction(){
carName="Volvo";
//此处可调用carName变量
}
JavaScript变量生命周期
JavaScript变量生命周期在它声明时初始化。
局部变量在函数执行完毕后销毁。
全局变量在页面关闭后销毁。
函数参数
函数参数只在函数内起作用,是局部变量。
HTML中的全局变量
在HTML中,全局变量是window对象:所有数据变量都属于window对象。
//此处可使用window.carName
functionmyFunction(){
carName="Volvo";
}
你知道吗?
你的全局变量,或者函数,可以覆盖window对象的变量或者函数。
局部变量,包括window对象可以覆盖全局变量和函数。
补充
ES6中的let关键字
let允许你声明一个作用域被限制在块级中的变量、语句或者表达式。与var关键字不同的是,它声明的变量只能是全局或者整个函数块的。
let语法:
letvar1[=value1][,var2[=value2]][,...,varN[=valueN]];
let声明的变量只在其声明的块或子块中可用,这一点,与var相似。二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数。
let和var的区别代码实例:
functionvarTest(){
varx=1;
if(true){
varx=2;//同样的变量!
console.log(x);//2
}
console.log(x);//2
}
functionletTest(){
letx=1;
if(true){
letx=2;//不同的变量
console.log(x);//2
}
console.log(x);//1
}
以上就是详解JavaScript作用域的详细内容,更多关于JavaScript作用域的资料请关注毛票票其它相关文章!