zoukankan      html  css  js  c++  java
  • 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中的块级作用域就先讲到这啦~~ 明天再见

  • 相关阅读:
    父母的房产继承买卖赠予以及网络红包代金券优惠券的国家最新税法规定
    家里这7个地方要装柜子,少装一个都是灾难!
    centos里的压缩解压命令tar总结
    2019年9月2日开学!寒假时间也定了……
    理赔时很容易出差错的3个“隐蔽”点
    Linux命令:用“dirs”、“pushd”、“popd”来操作目录栈
    python金融反欺诈-项目实战
    模型分数分布
    PSi-Population Stability Index (PSI)模型分稳定性评估指标
    Kolmogorov–Smirnov test(KS)
  • 原文地址:https://www.cnblogs.com/lhyxq/p/10189457.html
Copyright © 2011-2022 走看看