前言
过去,基础概念总是迷迷糊糊的,今儿碰到作用域,发现自己其实说的不够明白,就总结记录一些
(一)全局作用域
指的是环境中的整体JavaScript可作用范围。
1、浏览器
浏览器中打印window 可查看浏览器默认全局作用域中的方法; 此外,在浏览器中,由于历史原因,不仅仅有window作用为全局作用域的变量,还有self和global。 window==self==global
2、node环境
使用global,但打印出来的变量少很多。
<ref *1> Object [global] {
global: [Circular *1],
clearInterval: [Function: clearInterval],
clearTimeout: [Function: clearTimeout],
setInterval: [Function: setInterval],
setTimeout: [Function: setTimeout] {
[Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)]
},
queueMicrotask: [Function: queueMicrotask],
clearImmediate: [Function: clearImmediate],
setImmediate: [Function: setImmediate] {
[Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)]
}
}
打印window 和self都会报错;
(二)函数作用域
1、函数声明
function funA(){
console.log(1);
}
console.log(funA);
函数和函数是可以有前后,嵌套关系的。
2、对象字面量
就是在对象中声明函数;
const obj = {
name : 123,
age : 456,
say :function () {
console.log(this.name, this.age);
}
}
const obj = {
name : 123,
age : 456,
say () {
console.log(this.name, this.age);
}
}
(三)块级作用域
用let来声明,使用大括号来包裹。
let a=1;
{
let a=2;
console.log(a);
}
需要注意的是,在块级作用域中,不可以再声明函数。
一般情况下,变量取值到 创建 这个变量 的函数的作用域中取值。 但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。
参考链接
JS 作用域及作用域链
|