首页 > 其他分享 >JS学习重点-----预解析

JS学习重点-----预解析

时间:2022-11-01 17:45:20浏览次数:40  
标签:function console log JS num ----- var 解析

JS预解析

    • JS解析器在运行JS代码时分两步: 预解析和代码执行
      预解析
    • JS引擎会把JS里面所有 var 和 function 提升到当前作用域的最前面 代码执行时, 按照代码书写的顺序从上往下执行
    • 预解析分为变量预解析(变量提升) 和 函数预解析(函数提升)

例子1:

        //1.输出结果--undefined
        var num = 10;
        fun();
        function fun() {
                console.log(num);
                var num = 20;
        }
        //相当于执行了以下操作()
        var num;  //提升num = 10那个 num
        function fun() {
                var num;  //提升的是num = 20那个 num
                console.log(num);
                num = 20;
        }
        num = 10;
        fun();

例子2:

//2.输出结果--undefined, 20
var num = 10;
function fn() {
        console.log(num);
        var num = 20;
        console.log(num);
}
fn();
//相当于以下代码
var num;  //提升num = 10的 num
function fn() {
        var num;  //提升num = 20的 num
        console.log(num);
        num = 20;
        console.log(num);
}
num = 10;
fn();

例子3:

//3.输出结果--undefined, 9;
var a = 18;
f1();
function f1() {
        var b = 9;
        console.log(a);
        console.log(b);
        var a = '123';
}
//相当于以下代码
var a;
function f1() {
        var b;
        var a;  //此时a = undefined, 就近原则, 待会儿log(a)取此值
        b = 9;  //b赋值为9
        console.log(a);
        console.log(b);
        a = '123';
}
a = 18;
f1();

 

例子4:

//4.(典中典)以下代码
function f1() {
        //相当于 var = 9; b = 9; c = 9; b 和 c 直接赋值 没有var声明, 当 全局变量 看
        //集体声明 var a = 9, b = 9, c = 9
        var a = b = c = 9;
        console.log(a);
        console.log(b);
        console.log(c);
}
f1();
console.log(c);  //全局变量c = 9
console.log(b);  //全局变量b = 9
console.log(a);  //局部变量a, 函数外不能使用

 

标签:function,console,log,JS,num,-----,var,解析
From: https://www.cnblogs.com/lyxnov/p/16848552.html

相关文章

  • Semi-join使用条件,派生表优化 (3)—mysql基于规则优化(四十六)
    前面说了子查询里有no/any/all不能用limit,groupby,orderby等,他会被查询优化器优化掉,子查询可能会物化转成内连接semi-join查询,物化就是会吧子查询看做一个表,如果数据太大,超......
  • 子查询注意事项&semi-join(2)—mysql基于规则优化(四十五)
    前面说了mysql会吧一些冗余的sql语句查询优化重写,比如多于的括号,比如有的外连接其实跟内连接类似,可以优化查询表的顺序。子查询又分为相关和不相关子查询,如果子查询过滤条件......
  • mybatis-plus 用法
    本文主要介绍mybatis-plus这款插件,针对springboot用户。包括引入,配置,使用,以及扩展等常用的方面做一个汇总整理,尽量包含大家常用的场景内容。   原文:https://ju......
  • redo log-Transaction(2)—mysql进阶(六十)
    前面我们说了为了吧bufferpool的数据持久化到磁盘上,比如修改了一条数据,不可能每次吧整个页的数据都刷新过去,这样耗费性能,innoDB就是把修改的数据记录在redo日志里,redo日志......
  • springBoot+mysql实现用户权限控制--系统框架搭建(四)
    上篇文章说了AOP实现上下文的存储,有需要的可以看看,​​AOP实现上下文存储---系统框架搭建(三)​​环境需求:springboot+mysql5.7.16+Lombok1.18.121、需求背景为了实......
  • PS新手教程-如何使用PS把浑浊的海水图片调整成唯美浅蓝色调
    如何使用PS把浑浊的海水图片调整成唯美浅蓝色调?给大家介绍如何使用PS把浑浊的海水图片调整成唯美浅蓝色调,一起来看看吧。1.打开PS,插入素材图片,按“Ctrl+J”拷贝背景图层,得到......
  • 如何下载 macOS - 官方 Apple 支持
    如何下载macOS下载并安装Mac操作系统的最新版本或早期版本。Apple建议使用与你的Mac兼容的最新版macOS。macOS升级有助于保持电脑的安全性、稳定性和兼容性,而且......
  • 0xgame2022 PWN week1-4
    0xgameweek1pwn1签到的nc,catflagpwn2ret2backdoor,一个栈溢出#encoding=utf-8frompwnimport*importosimportsysimporttime#fromae64importAE64#fro......
  • SS310L-ASEMI肖特基二极管SS310L
    编辑-ZSS310L在SMA封装里采用的2个芯片,其尺寸都是60MIL,是一款低压降肖特基二极管。SS310L的浪涌电流Ifsm为80A,漏电流(Ir)为0.1mA,其工作时耐温度范围为-55~150摄氏度。SS310L......
  • 解决vue-router@3重复添加路由导致的控制台警告
    vue项目的权限限制功能,有一种实现方案是这样的进入项目只设置没有权限要求的路由向后台提供当前用户的权限后台根据用户权限,返回该用户可以用的路由信息将路由......