10.js预解析

就是在代码执行之前,对代码进行通读解释

只解析两个内容:

(1)对var声明的变量

(2)声明式函数
(1)对var声明的变量进行提前声明,但不赋值

javascript 复制代码
var x
console.log(x)  //undefined

//分别输出几?
var num = 1;
function f1() {
    num = 2;
    var num;
    console.log(num) 
}
function f2() {
    console.log(num)  
}
f1();
f2();

/*
  通读
  var num
  num=1
 
  function f1(){
      var num   //函数内部num和外部互不影响
      num=2
      console.log(num)  //2
  }
  function f2(){ 
      console.log(num)  //1
  }
  f1();
  f2();
*/

(2)声明式函数

对函数进行提前声明,并且直接赋值为一个函数

javascript 复制代码
// 1.会正常执行吗?
foo(); 
function foo() {
  console.log("Hello, world!");
}

// 2.会抛出错误吗?为什么?
bar();
var bar = function() {
  console.log("Bar function");
};

function outer() {
  inner();  // 3.这里会怎样?
  var inner = function() {
    console.log("Inner function");
  };
}
outer();

解答:

javascript 复制代码
/*
    1
    函数声明会在预解析阶段被提升到作用域顶部
    正常执行
*/

/*
    2
    var bar
    bar()
    bar=function(){
        console.log("Bar function");
    };
    会抛出错误
    因为在执行时bar还没有被定义
    尽管变量声明会被提升
    但是函数表达式的赋值不会提升
    因此在赋值之前调用会失败。
*/

/*
    3
    这里会抛出错误
     function outer() {
        var inner
        inner(); // 此时inner定义未赋值时undefined
        inner= function () {
             console.log("Inner function");
        };
     }
     outer();
 
*/

下一篇:11.作用域及作用域链-CSDN博客

相关推荐
CodeClimb1 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
光头程序员4 小时前
grid 布局react组件可以循数据自定义渲染某个数据 ,或插入某些数据在某个索引下
javascript·react.js·ecmascript
fmdpenny4 小时前
Vue3初学之商品的增,删,改功能
开发语言·javascript·vue.js
小美的打工日记5 小时前
ES6+新特性,var、let 和 const 的区别
前端·javascript·es6
涔溪5 小时前
有哪些常见的 Vue 错误?
前端·javascript·vue.js
程序猿online5 小时前
前端jquery 实现文本框输入出现自动补全提示功能
前端·javascript·jquery
Turtle7 小时前
SPA路由的实现原理
前端·javascript
HsuYang7 小时前
Vite源码学习(九)——DEV流程中的核心类(下)
前端·javascript·架构
傻小胖8 小时前
React 中hooks之useInsertionEffect用法总结
前端·javascript·react.js
蓝冰凌9 小时前
【整理】js逆向工程
javascript·js逆向