• 欢迎来到我的博客
  • [email protected]

js 作用域 闭包 匿名函数

学习笔记 tianlan 1年前 (2020-04-26) 696次浏览 0个评论 扫描二维码
文章目录[隐藏]

作用域

基础

全局作用域只有一个,每个函数又都有作用域(环境)。

  • 编译器运行时会将变量定义在所在作用域

这意味着:作用域链取决于【上下文环境(函数是怎么被定义的)】,而不是【函数是怎么被调用的】。其作用域链在编译时就已经确定了,而不是运行时。

  • 使用变量时会从当前作用域开始向上查找变量

js 作用域 闭包 匿名函数

let/const

使用 let/const 可以将变量声明在块作用域中(放在新的环境中,而不是全局中)

匿名函数

匿名函数就是没有函数名的函数,如下:

// 定义一个匿名函数
let myFunc = function(){};

闭包

  • 闭包是声明在函数里面的函数
  • 闭包指子函数可以访问外部作用域(必须在作用域链上)变量的函数特性,即使在子函数作用域外也可以访问。
  • 闭包会保留上级作用域,可能会导致内存泄漏。

实例代码

let outermostVar = 'outermost var';
function outer() {
    let outerVar = 'outer var';

    function inner() {
        console.log(outermostVar);
        console.log(outerVar);
        console.log(testVar);
    }

    inner();
}

/**
 * 立即执行函数,测试闭包
 */
(function() {
    let testVar = 'test Var';

    // outermostVar 和 outerVar 可以正常访问到
    // 但是访问不到 testVar
    // 原因:作用域链取决于【函数是怎么被定义的】
    outer();

})();

参考

http://houdunren.gitee.io/note/js/9%20作用域与闭包.html

js 作用域 闭包 匿名函数


天蓝, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:js 作用域 闭包 匿名函数
喜欢 (0)
[[email protected]]
分享 (0)

您必须 登录 才能发表评论!