前端基础知识:javascript作用域

2021-02-0209:49:10WEB前端开发Comments1,597 views字数 924阅读模式

javascript中变量或函数产生作用、而不会对外产生影响的封闭空间。外部不可以访问内部变量或函数,但内部能够访问外部。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

ES5:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

  1. 全局作用域:所有地方都可以访问
  2. 函数作用域:只能在函数内部访问

ES6:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

  1. 增加了块级作用域(最近大括号的作用范围),但仅限于let声明的变量

作用域链文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

规则:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

  1. 全局变量,函数申明都是属于0级链,每个对象占一个位置
  2. 凡是看到函数就延伸一个链出来,一级级展开
  3. 访问首先看到当前函数,如果当前作用域链没有定义,往上级链中检查
  4. 如此往复,直到0级链,如果0级没有,则弹出错误,这个变量没有定义

词法作用域文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

所谓词法(代码)作用域,就是代码在编写过程中体现出来的作用范围,代码一旦写好了,没有运行之前(不用执行),作用范围就已经确定好了,这个就是所谓的词法作用域。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

词法作用域的规则:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

  1. 函数允许访问函数外部的数据
  2. 整个代码结构中只有函数才能限定作用域
  3. 作用规则首先使用变量提升规则分析
  4. 如果当前作用规则里面有该名字,则不考虑外面的外面的名字

词法作用域根据声明变量的位置来确定该变量可被访问的位置。嵌套函数可获取声明于外部作用域的函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

function init() {
    var name = "Mozilla"; // name 是一个被 init 创建的局部变量
    function displayName() { // displayName() 是内部函数,一个闭包
        alert(name); // 使用了父函数中声明的变量
    }
    displayName();
}
init();

var let 区别文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

  1. var声明的变量,只有函数才能为它创建新的作用域

​ let支持块级作用域,花括号就能为它创建新的作用域文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html

  1. 相同作用域,var可以反复声明相同标识符的变量,而let是不允许的;
  2. let声明的变量禁止在声明前访问
// 全局变量
var i = 0 ;
// 定义外部函数
function outer(){
    // 访问全局变量
    console.log(i); // 0
  
    function inner1(){
        console.log(i); // 0
    }

    function inner2(){
        console.log(i); // undefined
        var i = 1;
        console.log(i); // 1
    }
  
    inner1();
    inner2();
    console.log(i); // 0
}
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/20916.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/gcs/20916.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定