• Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域


    昨天写了闭包

    今天就来聊聊块级作用域的事情

    在绝大多数编程语言中,都有块级作用域这个概念

    什么是块级作用域呢?

    前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块

    块级作用域,指的就是这种代码块作用域

    在其它类C的语言中,都拥有块级作用域

    块级作用域

    最常见的例子就是,在有块级作用域的语言中循环中声明的 i 

    只在当前的循环中可以访问,并不会污染全局变量

    JS就不一样了,循环结束后 i 在循环的外部依然可以访问

    for(var i = 0; i < 10; i++){
        // ...
    }
    console.log(i);

    这就是因为JS中没有块级作用域

    虽然在ES6中JS也有块级作用域,但是只有用let const 声明的变量才有块级作用域

    没有块级作用域,但我们又希望代码不要污染全局作用域,那么怎么办呢?

    模仿块级作用域

    作为一个合格的程序员,当没有现成的轮子的时候,怎么办?当然是自己造轮子了啊

    我们知道JS虽然没有块级作用域,但是有函数作用域啊

    所以我们可以使用函数作用域来模仿块级作用域

    首先我们要知道函数作用域和块级作用域的区别在哪里

    和块级作用域相比,函数作用域无法就是多了一个函数名引用,占用的内存不会被自动回收嘛

    那有一种函数不就很适合干这个事情嘛——匿名函数

    现在还有一个问题,函数需要我们调用啊

    也简单,我们使用函数表达式自执行不就完事儿了嘛

    所以有代码如下:

    (function(){
        // ...
    })();

    PS. 只有函数表达式才能自执行,function声明的时候加()并不会立即执行,还会报错

    将函数转为函数表达式的方法出来加小括号之外,JS中的一元操作符可以让函数转为函数表达式

    ! ~  + - 

     

     JS中的块级作用域就先讲到这啦~~ 明天再见

  • 相关阅读:
    小乖乖的Linux历险记
    走近虚拟机与Linux
    Navicat for MySQL数据库管理工具安装和破解
    Spring + Struts + Hibernate 简单封装通用接口
    Java 学习路线图
    Java Mail 发送带有附件的邮件
    Java POI 读取Excel数据转换为XML格式
    Spring + Struts + Hibernate + Bootstrap-table 实现分页和增删改查
    Java 基础知识
    SSH三大框架知识点
  • 原文地址:https://www.cnblogs.com/lhyxq/p/10189457.html
Copyright © 2020-2023  润新知