Scope(作用域)

45 篇文章 1 订阅
8 篇文章 1 订阅

作用域

  • 变量和函数的生效范围

    1.根据作用域,可以把变量和函数分为 全局变量 和 局部变量.

    2.JS中的作用域是 函数级作用域 ,而c语言中的作用域是块级作用域.

    3.全局变量 和 全局函数(只要不在函数中声明的变量和函数,都是全局变量和函数.)

    对于全局变量和全局函数,作用域整个script标签,生命周期跟整个页面一样.

    对于局部变量和局部函数(在一个函数内部声明的),作用域就是当前函数的函数体

    4.JS内存管理: 都是垃圾回收机制,系统自动管理,当变量或者函数,超出作用域,该变量和函数的内存空间,就会被垃圾回收机制回收,程序员不需要自己手动管理.

  • 特性

    1. JS中,不能在外边直接访问函数中的局部变量和函数,但是在函数中,可以访问外边的全局变量和全局函数,外面看不见里面,里面看见外边.

    2. 在函数中声明变量时,不加var,相于对window的全局属性赋值,是全局变量.(一定要结合第3点),保证该函数作用域中,没有与之同名的局部变量.

    3. 就近原则,访问变量时,会先在当前作用域中查看有没有该变量名或者函数名,如果有优先使用该作用域中的的变量名,如果没有继续往上查看父级作用域,依次找到全局作用域,如果还没有,系统报错

    4. 函数的作用域在定义时,就已经形成了,跟调用位置无关.

    5. 在下面script标签中,可以访问上面script标签中的全局变量和全局函数(上面的不能访问下面的)

var a= 0;
if(true){
  console.log(a); // function a(){} 因为块中函数声明提升
  a = 1; // 块作用域中 a = 1; windows.a = 0;
  // 函数声明提升;
  // 特殊处理了,为了兼容ES3语法规范,会把当前的对a操作映射到全局作用域中(a = 1),但是这个代码之后,操作就和全局没有任何关系了。
  function a(){}; // a = 1; windwos.a = 1;
  console.log(a); // 1
  a = 21; // a = 21;
  console.log(a); // 21
}
console.log(a); // 1

https://serious-lose.notion.site/JS-Scope-0546273b45784a999f1571b5ef675222icon-default.png?t=M276https://serious-lose.notion.site/JS-Scope-0546273b45784a999f1571b5ef675222 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值