分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

js之作用域

发布时间:2023-09-06 02:20责任编辑:董明明关键词:js作用域

  1.什么是作用域

  作用域是用于收集存储维护变量,以及当前执行代码声明的变量所拥有的权限,

   例如 : 

      function foo(a){

        console.log(a); --------    1   

      };

      foo(666);

      console.log(a); -------   2   

    

    此时执行该段代码  

     1  -- 处打印我们得到   666  因为在函数中声明了 a 参数  且执行foo函数像里面传入666就相当于将a赋值为666  所以console.log  查询a可以获得666

     2  --处打印我们获取一个报错 Uncaught ReferenceError: a is not defined  说a没有定义,这是为什么呢.

     2.1 首先我们来说明下LHS 查询和RHS查询(书上给的解释是: 赋值操作的左侧或右侧)

        我的理解是

          LHS  ---  被赋值的变量

          RHS ---  查询变量的值

        且这两种查询都是从本身所在作用域向上冒泡查询直到遇到定义的变量位置,

        不同的是 :

          1.RHS 在本作用域查询变量遇到不存在需要查询的变量则逐级向上一级作用域查询,查到则停止,否则直到到window作用域还没有查到则会返回一个 xxx  is not defined

          2.LHS 在本作用域查询变量遇到不存在需要查询的变量则逐级向上一级作用域查询,查到则停止, 到window作用域还没有查到则会默认再window 全局变量处偷偷的创建这个需要查询的变量

    下面用一段简单的代码来说明 LHS 和 RHS

      function foo1(a){

        console.log(g) 

          //这里将会出现报错  g is not defined   因为这里执行的RHS查询 ,在查询g的时候发现foo作用域没有,所以向他的上一级window对象内查询也没有存在,所以返回not defined

        console.log(a+g); 

        g =  a;

      }

      foo1(666);

        

      

      function foo2(a){

        g =  a;

        //在FOO2函数中 a向g赋值  此时g在foo2作用域中也不存在,他也向上查询,遇到window对象,发现其中也没有定义g 变量,但是此时呢他就在window对象中创建了一个g对象,所以window对象中就有这个变量

        console.log(a+g);   -----   打印控制台获得 4 

      }

      foo2(2);

    //如果将foo2中 g = a 换成  a = g 会怎样呢  --- 大家可以试试哦  

js之作用域

原文地址:https://www.cnblogs.com/jjq-exchange/p/9865974.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved