zoukankan      html  css  js  c++  java
  • JS学习之函数的作用域

    作用域
    变量或者函数可访问的一个范围,以函数来划分,一个函数块就是一个作用域
    一 全局作用域
    全局:整个文档
    变量或者函数在函数外面声明,那它们就是全局变量或者全局函数,在这个页面的任何地方都可以访问的到。
    声明全局作用域的方法:
    1、把变量或者函数放在函数外面声明
    2、变量不用var声明,直接给变量赋值;不管在函数外还是函数内声明
    全局变量在任何地方都可以访问的到是因为全局变量是window的一个属性,window是一个全局对象,本身在页面中的任何位置都可以访问

     1     var a=10;
     2         console.log(a); //10  a 在函数外面声明是一个全局变量
     3  
     4       function  test(){
     5            var b=12;  //在函数内声明,是局部变量
     6            c=20;   // 没有用var 声明就是全局变量
     7            console.log(a);
     8       }
     9       test(); // 10 因为a 是在函数外面声明的,是全局变量,所以函数内部也可以访问
    10       console.log(c);  //可以访问的到,
    11       console.log(b); // 报错 b is not defined 因为b是局部变量,只能在函数内部使用,在函数外面无法访问的到

    注意:1:尽量避免使用全局变量,可能会变量覆盖
    一直存在内存中,当页面一打开就一直存在着内存中,当页面关闭的时候才会消失
    2:声明变量的时候一定加上var 因为不建议使用全局变量

    二  局部作用域

    局部:函数范围内
    变量或者函数在函数内部声明的,作用仅存在于声明的函数中,在函数外面无法访问
    函数里面可以声明函数,就是函数嵌套(局部函数),可以访问父函数里的内容

     1  function  test(){
     2             var a=10; //局部变量
     3             var b=20;
     4             //在函数内部声明,是局部函数
     5             function test1(){
     6                  console.log(a+b);
     7             }
     8             test1(); // 只能在函数内部调用
     9   }
    10       test();  // 在函数外面声明,是一个全局函数
    11       console.log(a); // 报错 a 是一个局部变量,只能在test函数内部使用,在test函数外无法访问
    12       // 同样的道理也无法访问到b ,test1()

    注意:局部变量和局部函数只能在声明他们的地方用,在其他地方无法访问,会直接报错

    三 作用域链

    变量与函数的查找规则
    查找规则:如果一个函数需要用到一个变量,先会在自己的作用域里去找这个变量,如果自己有就直接使用自己的,如果自己没有就会一层一层往外找直到找到外面的变量,找到后就用外面的变量

     1       var a=10;
     2       function test(){
     3           console.log(a);
     4 
     5       }
     6       test(); // 10  函数先会在自己的作用域里去找a,发现没有找到就会找他父级,在父级中找到了一个a,就用这个a
     7       function  test1(){
     8              var a=12;
     9        console.log(a);
    10       }
    11       test1(); // 12 在自己的作用域中找到了a,就会用这个a,停止查找(就近原则)

    注意:作用域链会一层一层往外找,不会往里面找

  • 相关阅读:
    linux服务器上无root权限如何安装nodejs?
    Jupyter按tab键无法补全,而且报错TypeError: __init__() got an unexpected keyword argument 'column'的解决办法
    通过损失函数优化提高训练速度、准确性和数据利用率
    华为诺亚AutoML框架-Vega:(2) 代码结构
    华为诺亚实验室AutoML框架-Vega:(1) 介绍
    AutoML: A survey of the state-of-the-art综述期刊论文免费下载
    安装Docker 图形界面管理工具 -- Portainer
    Dockfile 编写示例(将 jar 制作成容器)
    Docker 常用命令集
    云服务器CentOS安装Docker
  • 原文地址:https://www.cnblogs.com/xubj/p/9869903.html
Copyright © 2011-2022 走看看