javascirpt的作用域

作用域简单地来说就是一套良好的存取变量的规则

一、全局作用域

在全局作用域定义的变量,可以作为window(浏览器环境)或global(nodejs环境)的属性访问

很多场景下声明的全局变量是作为 多处使用的常量,在ECMAScript或commondjs模块环境中可以使用一个或一系列js文件来声明

二、函数作用域

function foo() {
 //函数作用域,可以嵌套
 var a = 100 //外部无法访问


}

函数作用域可嵌套多层,如果不让函数名可以访问,可以使用立即执行函数:

(function foo(){
  //函数作用域
  var a = 100

})()

 

 三、块作用域

1, try...catch中的catch声明的变量是在狂作用域(不建议使用)

try {
   bar()

} catch (error) {
  //外部无法访问
  console.log(error)
  var a = 100 
    
}

console.log(error) //报错,
console.log(a) //报错

2. with语句(严格模式下禁止使用,不建议使用)

var obj = { a: 100 }
with(obj) {
  a = 'hello'
}

3. eval()函数(不建议使用)

4. 通过立即执行函数实现块作用域

5. 在es6中原生支持了块作用域

//打括号包含的代码块构成一个块作用域
{
  var a = 100. //外部无法访问
  let b = 'hello' //外部无法访问

}

 

posted @ 2021-06-08 23:09  天边彩虹  阅读(55)  评论(0编辑  收藏  举报