zoukankan      html  css  js  c++  java
  • JS高级 2

       递归:函数自己调用自己

     在JavaScript中唯一能产生作用域的东西是 函数!js中只有函数可以创建作用域    

    词法作用域,也叫做静态作用域
            //就是在代码写好的那一刻,变量和函数的作用域就已经确定了,这种作用域,就是所谓的词法作用域
            //和词法作用域相对的叫动态作用域 js中是词法作用域不是动态作用域
            //4.词法作用域的规则
            //函数允许访问函数外的数据.
            //整个代码结构中只有函数可以限定作用域.
            //作用域规则首先使用提升规则分析
            //如果当前作用域中有了该变量, 就不考虑外面的同名变量,从内到外考虑着走

             

    js预解析

    1. 定义

    预解析:在当前作用域下,js运行之前,会把带有var和function关键字的事先声明,并在内存中安排好。然后再从上到下执行js语句。预解析只会发生在通过var定义的变量和function上。

     //只要是函数就可以创造作用域   //函数中又可以再创建函数    //函数内部的作用域可以访问函数外部的作用域     //如果有多个函数嵌套,那么就会构成一个链式访问结构,这就是作用域链

    变量提升
            //在分析代码的时候,首先将以var声明的变量名和以function开头的函数,进行提升        //再去执行代码的具体执行过程
           1.变量的提升是分作用域的
              2.当函数和变量同名的时候,只提升函数,不会提升变量名
               3.函数同名,全都都会提升,但是后面的函数,会覆盖前面的函数
               4.函数表达式中函数的声明不会被提升,但是变量会被提升
         
    作用域链
            //只要是函数,都会有作用域
            //函数内部的作用域可以访问函数外部的作用域
            //如果函数进行嵌套,就会构成一个链条的结构,这个就是作用域链
     //变量的搜索原则
            //1.在使用变量的时候
                //* 首先在所在的作用域中查找
                //* 如果找到了 就直接使用
                //* 如果没有找到 就去上级作用域中查找
            //2.重复以上步骤
                //* 如果直到0级作用域链也就是全局作用域还没有找到,报错
    函数里面的全局变量(没有加var声明的变量)要在函数调用之后才能被外部获取到。
    函数里面的return this,返回的是window对象,如果是用实例化对象,return this则是实例化对象。

         

         闭包 

       
    js中的闭包就是函数  闭包的原理就是作用域访问原则——上级作用域无法直接访问下级作用域中的变量   
    闭包要解决什么问题?
                //1.闭包内的数据不允许外界访问
                //2.要解决的问题就是间接访问该数据
     
    //沙箱模式的优势
            //1.沙箱模式使用的是IIFE,不会再外界暴露任何的全局变量,也就不会造成全局变量污染
            //2.沙箱中的所有数据,都是和外界完全隔离的,外界无法对其进行修改,也就保证了代码的安全性
    
    
            //js中沙箱模式的实现原理就是
            //函数可以构建作用域!上级作用域不能直接访问下级作用域中的数据
        



















  • 相关阅读:
    视频解析小技巧
    linux系统路由设置
    tracert路由跟踪命令
    php+nginx
    docker快速拉取镜像
    linux命令
    添加docker命令
    linux模糊查询文件名
    查看日志
    模板函数与模板类
  • 原文地址:https://www.cnblogs.com/chuanshi123/p/8298719.html
Copyright © 2011-2022 走看看