zoukankan      html  css  js  c++  java
  • 学习笔记=>《你不知道的JavaScript(上卷)》第三章:函数作用域和块级作用域

    3.1 函数中的作用域

      (1)JavaScript具有基于函数的作用域,每声明一个函数的时候会为其自身创建一个‘气泡’,这个气泡内声明的变量或函数外界无法访问。

    函数作用域的含义是指,属于这个函数的全部变量都可以在整个函数范围内使用及复用(事实上在嵌套的作用域中也可以使用)。

    3.2 隐藏内部实现

      例子:

    var a = 666;
    
    function sum(b){
          return a + b;
    }
    
    function test(){
        var b = sum(5) + 10;
      console.log(b); }

      这个例子中变量a和方法sum实际上只会在方法test中使用,依照最小特权原则

    最小特权原则也称为最小授权原则和最小暴露原则,这个原则是指在软件设计中,应该最小限度的暴露必要的内容,将不必暴露的内容隐藏起来。

      以上实例应该改为:

    function test(){
        var a = 666;
    
        function sum(b){
              return a + b;
        }
    
        var b = sum(5) + 10;
      console.log(b);
    } 

    3.3 函数作用域

      将任意代码添加添加包装函数,可以将其中的变量和函数隐藏起来,外部作用域无法访问包装函数里面的变量和函数。

    var a = 2;
    
    function foo(){
         var a = 3;
         console.log(a);    //3
    }
    
    foo();
    
    console.log(a);     //2

      但是还有点不好的地方,实际上还是创建了一个外部的foo函数,它本身就污染了所在作用域,

      且需要在后面调用执行。这个时候可以使用IIFE(自执行),改为:

    var a = 2;
    
    ;(function(){
           var a = 3;
           console.log(a);   //3
    })();
    
    console.log(a);    //2

    3.4 块作用域

      JavaScript中实现块作用域有以下几种方式:

        with:用with从对象中创建出来的作用域仅在with声明中有效,外部无效。

        try/catch:ES3规范中规定,try/catch的catch语句会创建一个块级作用域,其中声明的变量只在catch语句中有效。

        let:let可以将变量绑定到所在的任意作用域中,也就是说,let声明的变量,隐式的绑定在本身所在的作用域中。

                  const:声明一个不可修改的变量

    //便于可读,我们可以显示的为块作用域添加块
    
    var a = true;
    
    if(a){
        {    //显示的创建块
              let b = 666;
              console.log(b);
        }
    }

      总结:JavaScript是基于函数作用域的,每次声明一个函数,函数中包含的变量和函数外部作用域无法访问。我们可以通过包装函数将不必要对外暴露的变量或函数包装隐藏起来。也可以通过IIFE(自执行函数)来隐藏变量和函数。js中的块级作用域实现方式有with(不要使用),try/cath的cath语句,let,const等。

  • 相关阅读:
    OSGI简介
    公司僵尸帐号引发了一系列的入侵事件-细说密码强度验证的重要性
    为其他对象提供一种代理以控制对这个对象的访问-代理模式
    运用共享技术有效地支持大量细粒度的对象-享元模式
    移动APP为什么要开发两套Android和IOS-桥接模式
    非法疫苗引发的思考 -外观模式
    你们还记得张江男、张江女两张图片吗?-装饰模式
    一个程序员的蜕变(我是如何成为架构师的)
    公司新加了一台友宝自动售货机引发的思考-适配器模式
    程序员如何应对北上广高房价示例解说-建造者模式
  • 原文地址:https://www.cnblogs.com/huangzhenghaoBKY/p/9798542.html
Copyright © 2011-2022 走看看