变量提升

  • 变量提升:是指js代码执行过程中,js引擎把变量的声明和函数的声明提升到代码的开头的“行为”。
  • 变量和函数在代码里的位置是不会变的,而是在编译阶段被js引擎放入内存中。
  • 变量提升后,会给变量设置默认值,undefined。
  • 带来的问题
    • 变量会被覆盖
        foo()   // foo2
      function foo() { console.log('foo1') }
      function foo() { console.log('foo2') }
    • 应该销毁但没有销毁
      function foo() {
    for(var i = 0;i < 10;i++) {}
    console.log(i) //10
    }
    foo()

执行上下文

  • 执行上下文是js执行一段代码时的运行环境
  • 执行上下文的种类
    • 全局执行上下文(在整个页面的生存周期内)
    • 函数执行上下文(调用一个函数的时候,函数体里面的代码被编译,会创建函数执行上下文,函数执行结束,会销毁(一般情况下))
    • eval执行上下文(用的很少)

调用栈

  • 用来管理函数调用关系的ds

作用域

  • 作用域:在程序中定义变量的区域,该区域决定了变量的声明周期
  • 人话: 变量和函数的可访问范围
  • 作用域控制变量和函数的可见性和声明周期
  • 种类:
    • 全局作用域 : 代码中任何地方都可以访问到这个作用域。生命周期最长
    • 函数作用域 : 函数内部定义的变量或函数,并且定义的变量或函数只能在函数内部访问,函数执行结束后,会被销毁。
    • 块级作用域 : 作用块内声明的变量不影响块外面的变量(let 和 const 都可以形成块级作用域 )。
      • e.g
        function foo() {
      var a = 1;
      let b = 2;
      {
      let b = 3;
      var c = 4;
      let d = 5;
      console.log(a);
      console.log(b);
      }
      console.log(b);
      console.log(c);
      console.log(d);
      }
      foo()
      • var 声明的 ,会被放到变量环境里面(es6) es3 放到变量对象里
      • let 声明的, 会被放到词法环境中
      • 在函数的作用域内部,通过let声明的变量并没有被存放到词法环境中

javascript中一些难以理解的专有名词 1(也不是很专有)的更多相关文章

  1. JavaScript中的闭包理解

    原创文章,转载请注明:JavaScript中的闭包理解  By Lucio.Yang 1.JavaScript闭包 在小学期开发项目的时候,用node.js开发了服务器,过程中遇到了node.js的第 ...

  2. javascript中 (function(){})();如何理解?

    javascript中 (function(){})();如何理解? javascript中: (function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环 ...

  3. 关于javascript中闭包的理解

    闭包就是能够读取其他函数内部变量的函数. 在javascript中,只有函数内部的子函数可以读取局部变量,因此,我理解闭包就是定义在一个函数内部的函数. 例子: var f1 = function() ...

  4. 对JavaScript中this的理解

    JavaScript中的this其实没传说中的那么难,也没那么乱. 我们来分析下,this主要是跟它的执行环境有关. 而通常情况下,this都是放在函数体中或可执行的JS代码中(函数体除外). 至于J ...

  5. 对JavaScript中闭包的理解

    在前端开发中闭包是一个很重要的知识点,是面试中一定会被问到的内容.之前我对闭包的理解主要是"通过闭包可以在函数外部能访问到函数内部的变量",对闭包运用的也很少,甚至自己写过闭包自己 ...

  6. 转:对JavaScript中闭包的理解

    关于 const     let      var  总结: 建议使用 let  ,而不使用var,如果要声明常量,则用const. ES6(ES2015)出现之前,JavaScript中声明变量只有 ...

  7. JavaScript 中this 初步理解笔记

    Javascript中函数中的this通常指向的是函数的拥有者,这个拥有者就是上下文执行对象:另外一点需要注意,this只能在javascript函数内部使用.

  8. javascript中的原型理解总结

    经过几天研究查找资料,对原型终于有点理解了,今天就做下总结,不对之处,希望各位能够提出. 1.每一个Javascript对象(null除外)都和另一个对象相关联,“另一个”对象就是我们今天所要总结的原 ...

  9. javascript 中{}和[] 的理解

    下面的一段解释是摘抄的,基本理解正确,做个记录.其实js中数组其实就是对象,typeof(['a', 'b', 'c'])//测试之后结果为 :  "object" 一.{ } 大 ...

  10. 第二话:javascript中闭包的理解

    闭包是什么? 通过闭包,子函数得以访问父函数的上下文环境,即使父函数已经结束执行. OK,我来简单叙述下,先上图. 都知道函数是javascript整个世界,对象是函数,方法是函数,并且js中实质性的 ...

随机推荐

  1. 白嫖GitHub Action实现开源项目CICD

    什么是CI/CD?让你的项目变得更加敏捷! 在今天这个快速变化的时代,开发者们需要与时俱进,不断提升自己的工作效率.在这篇文章里,将一起探讨如何使用CI/CD和Github Action让你的项目更加 ...

  2. [aac @ 0x1dd24c0] Input contains NaN/+-Inf

    ffmpeg编码pcm为aac时报错:[aac @ 0x1dd24c0] Input contains NaN/+-Inf 在./configure选项后面加上下列选项就可以 --enable-enc ...

  3. Apktool-安卓逆向反编译工具的安装与使用

    一.安装Apktool 1.下载Windows 包装器脚本(右键单击,将连接另存为apktool.bat) 2.下载 Apktool-2,重命名为apktool.jar 3.将下载的放在同一文件夹下 ...

  4. 关于 import 和 import static

    import 嘛,就是导包.比如说java的一些自带的包,例如 import java.lang.Matn: 又或者我们自己做的包,例如 import com.link.testImport; 一些实 ...

  5. pytest的几种执行方式

    1 pytest xxxx 2 python -m pytest xxxx python -m pytest --html=./report/rep2.html test_env_pytest_ini ...

  6. 掌握这些GitHub搜索技巧,你的开发效率将翻倍!

    作为开发it行业一员,学习借鉴他人项目是很有必要的,所以我们一般都会从github或者 Gitee 上面去参考借鉴他人的项目来学习增加自己的项目经验 但是github你真的用对了嘛,他的功能其实很强大 ...

  7. Bing的AI聊天使用体验

    Bing开启了AI聊天功能,我们这里做一个简单的测评,看看各种AI是否达到预期效果. PS:没有"魔法"的各位就不用看下去了 1.登陆 打开edge,遇到的第一个问题就是,使用&q ...

  8. 2023-05-06:X轴上有一些机器人和工厂。给你一个整数数组robot,其中robot[i]是第i个机器人的位置 再给你一个二维整数数组factory,其中 factory[j] = [posit

    2023-05-06:X轴上有一些机器人和工厂.给你一个整数数组robot,其中robot[i]是第i个机器人的位置 再给你一个二维整数数组factory,其中 factory[j] = [posit ...

  9. 2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。

    2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能. 答案2023-04-30: resampling_audio.c 是 FFmpe ...

  10. 2020-10-25:go中channel的close流程是什么?

    福哥答案2020-10-25: