弁言
一向处置服务端开辟。因为近年来前端迅速发展,所以想入坑前端行列,虽然一向有打仗并开辟前端相干的项目,然则想要做前端的事情决议体系的进修一下前端,就先从变量最先吧!
变量的作用域
在js中变量的作用域只要两种,全局变量、局部变量
全局变量
在函数内,全局变量能够直接接见
// 全局变量
var name = '张三'
function showName() {
console.log(name);
}
showName(); // 张三
局部变量
天然局部变量不能够在函数外部接见
// 局部变量
function showName2() {
var name2 = '李四'
}
console.log(name2) // error: Uncaught ReferenceError: name2 is not defined
声明局部变量必需运用 var,不然声明的则是全局变量
// 局部变量
function showName3() {
name3 = '王五'
}
showName3();
console.log(name3) // 王五
假如局部变量与悉数变量称号一样会怎样呢?
js 不会像服务端言语那样称号一样会发生争执。经由过程下面的例子看到,函数会先找局部变量,也就是说局部变量的优先级要比全局变量的优先级要高。
var name = '张三'
function showName() {
var name = '李四'
console.log(name) // 李四
}
showName();
console.log(name) // 王五
适才说过局部变量必需运用var声明,不然声明的是全局变量。假如已存在雷同称号的全局变量会怎样呢?
在函数实行后,会转变全局变量的值。
var name = '张三'
function showName() {
name = '李四'
console.log(name) // 李四
}
showName();
console.log(name) // 李四
链式作用域
showName2 函数包含在 showName 函数中,这是 showName 函数一切局部变量对 showName2 函数可见,然则相反是不可的。
经由过程情形三,能够看出来子函数回向父级一级一级寻觅变量,一切父级的变量对子级都是可见的,这就是js的 “链式作用域”
// 情形一
function showName() {
var name = '张三'
function showName2() {
var name = '李四'
return name
}
return showName2()
}
var result = showName()
console.log(result) // 李四
// 情形二
function showName() {
var name = '张三';
function showName2() {
return name;
}
return showName2()
}
var result = showName()
console.log(result) // 张三
// 情形三
function showName() {
var name = '张三';
function showName2() {
function showName3() {
return name;
}
return showName3()
}
return showName2();
}
var result = showName()
console.log(result) // 张三
结
- js 作用域分全局变量与局部变量。
- 局部变量必需运用 var 声明,不然声明的是全局变量。
- 函数能够直接接见全局变量,外部不可运用局部变量。
- 全局变量与局部变量称号能够反复,局部变量优先级更高。
- 父级函数变量对一切子函数可见,子函数会一级一级向上寻觅变量。