• 预解释


    1.当浏览器加载HTML页面的时候,首先会提供一个全局JS代码执行的环境 -->全局作用域(后台:global/ 前端:Windows)

    var num = 12;
    var obj = {name: "小明", age: 7};
    function fn() {
        console.log("你好啊!!!");
    }
    console.log(fn); // -->把整个函数的定义部分(函数本身)在控制台输出
    console.log(fu()); //-->把当前函数执行的返回结果(return 后面是什么,返回什么,如果没有 return,默认值是undefined) 在控制台输出

    2.预解释

    - 在当前的作用域中,JS代码执行之前,浏览器首先会默认的把所用代 `var` 和 `function` 的进行提前的声明或者定义

    - 理解声明和定义
        - ` var num = 12;`
        - 声明(declare):`var num;` -->告诉浏览器在全局作用域中有一个 `num` 的变量了
        - 定义(defined):`num = 12;` -->给我们的变量赋值

    - 对于带 `var` 和 `function` 关键字的在预解释的时候还是不一样的

        - `var` --> 在预解释的时候只是提前的声明
        - `function` --> 在预解释的时候提前声明 + 定义都完成了

    - 预解释只发生在当前的作用域下,例如:开始只对 我 `windows` 下的进行预解释, 函数只有执行的时候才会形成一个新的私有的作用域(新的堆内存),之后在对函数中的变量进行预解释

    console.log(num);//-->undefined
          var num = 12;
          console.log(num);//-->12
    
          var obj = {name: "小明", age: 7};
    
          fn(100,200);// -->可以执行,因为在预解释的时候就声明 + 定义了
          // console.log(total);  这个将会报错,因为函数中的预解释是在私有作用域中进行的
          function fn(num1,num2) {
              var total = num1 + num2;
              console.log(total);
          }

    3.JS中内存的分类

    - **栈内存**:用来提供JS代码执行的环境  --->作用域(全局作用域/私有作用域)
    - **堆内存**:用来存储引用数据类型的值 --->对象存储的是属性名和属性值,函数存储的是函数本身(以字符串形式)

                                                                                                                        2019-04-03  

  • 相关阅读:
    Array.sort()对象数组排序
    ES6极简数组去重 & 深拷贝
    中文字符按拼音首字母排序(转)
    浏览器常用插件 & 开发常用类库
    异步&分段处理海量数据
    线上环境window.open()新窗口被拦截(转)
    git 版本回退(转)
    CSS字体渐变 & 隐藏浏览器滚动条 & grid布局(转载)
    Python3安装使用SaltStack以及salt-api详解
    Python3之 contextlib
  • 原文地址:https://www.cnblogs.com/nie5135257/p/10651993.html
Copyright © 2020-2023  润新知