zoukankan      html  css  js  c++  java
  • JavaScript中---作用域

    作用域:
    变量还有函数作用的范围。
    浏览器的内核主要有两大功能,一个是渲染页面,另一个就是我们的JavaScript的解释器了。

    我们主要来说说JavaScript解释器,在解析时是怎么样的工作原理。

    在解析的时候,首先会发生预解析,就是说不会直接一行一行去执行我们所写的代码,它会先去找有哪些声明的变量,遇见函数体的时候会把函数放到最上面的位置,当变量名和函数名重名的时候函数会替代变量声明。
    在解析的时候碰到的是个函数体,那么会预先处理函数体中的变量或者函数,知道有哪些声明的事项。
    如果是变量,那么在函数体中调用变量时,会取函数体当中的变量,如果函数体中没有,则找外层变量

    函数预解析:
      会将函数提到顶部
    变量预解析:
      会内部事先知道是否有该变量,但不会改变解析位置

      当预解析时,变量和函数出现同名时,函数会替代掉变量,同一个命名只会存在一个


    全局作用域 - 在任何地方都能访问
      函数外定义的变量拥有全局作用域
      不使用var定义的变量拥有全局作用域
      所有window对象上的属性拥有全局作用域
    局部作用域 - 只能在函数内部访问
      使用var在函数内部定义的变量拥有局部作用域


    全局:在任何地方都能调用
    局部:只在当前作用范围(功能体)能调用

     1 <script>
     2     var a = 10;// 全局
     3     function fn() {
     4         console.log(a);//undefined
     5         var a = 5;// 局部
     6         console.log(a);//5
     7     }
     8     fn();
     9             
    10 </script>

    闭包的概念
      函数嵌套函数,内层函数可以访问外层函数中的变量

     1 <script>
     2     function fn1() {
     3         var a = 1;
     4         function fn2() {
     5         a++;
     6         console.log(a);
           return a;
    7 } 8 fn2(); 9 } 10 fn1(); 11 </script>

    闭包的做大用处有两个:

    一个是在函数体外部读取i内部的变量,另一个就是让这些变量始终保存在内存中。

  • 相关阅读:
    C#生成唯一值的方法汇总
    WCF中可以使用SVCUtil.exe生成客户端代理类和配置文件
    C# 打开钱箱支持北洋、佳博、爱普生
    MVC使用 Elmah 日志记录组件
    C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(一)
    C# Gma.QrCodeNet生成二维码
    支付宝支付开发——当面付条码支付和扫码支付
    微信支付四大支付模式分别有哪些区别?
    web安全测试---AppScan扫描工具
    SVN 使用学习记录
  • 原文地址:https://www.cnblogs.com/exhuasted/p/6135409.html
Copyright © 2011-2022 走看看