美文网首页
[JavaScript基础] 递归,预编译

[JavaScript基础] 递归,预编译

作者: Darkdreams | 来源:发表于2018-11-13 18:11 被阅读0次

递归

  1. 找规律
  2. 找出口,如果没有出口,就是死循环。
    函数自调用
// 阶乘
// n! = n * (n - 1)!
function num(n) {
  if(n == 1 || n == 0) {
    return 1
  }
  return n * num(n - 1)
}
num(10)  // 3628800

//斐波那契额数列
// fb(n) == fb(n - 1) + fb(n - 2)
function fb(n) {
  if(n == 1 || n == 2) {
    return 1
  }
  return fb(n - 1) + fb(n - 2)
}
fb(10) // 55

预编译

JavaScript,是单线程,解释性语言。

语法分析

浏览器会通篇扫描,检查代码有没有低级错误,比如使用了中文符号等。但不执行代码

  1. 函数声明整体提升,不管函数声明写到哪里,浏览器都会提升到最前面。
test();  //-可执行
function test() {
  console.log("被提升了")
}
  1. 变量 声明提升
//var a;
console.log(a); // undefined
// a = 123
var a = 123;
console.log(a); // 123

预编译前奏
  1. imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象window所有。
var a = 1;
b = 2; //- window.b = 2
//
function demo() {
  var a = b = 123;   
  /*
    先赋值123给b,再声明a,把b的赋值给a。
    a是局部变量,而b未经声明是个全局变量。
  */
}
demo();
console.log(a);
console.log(b);
  1. 全局上所有声明的变量(函数),全是window的属性。
var a = 1;
/* window {    //a就是window的属性
    a : 1
  }
*/

函数预编译过程(四步骤)
  1. 创建OA对象Activation Object(执行期上下文);
  2. 找形参和变量声明,将形参和变量名作为AO的属性名;
  3. 实参和形参值相统一;
  4. 在函数体中找到函数声明(函数声明优先级最高)

全局预编译过程
  1. 创建GO对象Global Objectwindow === GO
  2. 找形参和变量声明,将形参和变量名作为GO的属性名;
  3. 在函数体中找到函数声明(函数声明优先级最高)

解释执行

相关文章

  • [JavaScript基础] 递归,预编译

    递归 找规律 找出口,如果没有出口,就是死循环。函数自调用 预编译 JavaScript,是单线程,解释性语言。 ...

  • JavaScript 的“预 编译”

    JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行...

  • JavaScript之递归

    递归基础 什么是递归?在JavaScript程序中,函数直接或间接调用自己。通过某个条件判断跳出结构,得出结果。递...

  • 你需要知道的javascript的提升

    javascript在执行前会有一个预编译过程,预编译过程会先预声明变量再预定义函数,比如 预编译过后,类似于 运...

  • TypeScript

    TypeScript 是JavaScript类型的超集,它可以编译成纯JavaScript。 基础类型 布尔值bo...

  • 前端面试题总结(算法)

    javascript递归遍历所有DOM文档节点 javascript递归遍历所有DOM文档节点 HTTP 方法:G...

  • 21. Merge Two Sorted Lists

    Java Javascript 递归解

  • 斐波那契数列

    ?环境:牛客的编译环境?语言:JavaScript☕️难点:一说到斐波那契数列,直接习惯性地写出递归地方法,然后今...

  • Javascript 基础 And 进阶

    Javascript 基础 And 进阶 知识点: 原型链 this指向 作用域和预解析 new关键字 闭包 DO...

  • 【前端】07 - JavaScript基础-预解析

    1. 预解析的相关概念 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。JavaS...

网友评论

      本文标题:[JavaScript基础] 递归,预编译

      本文链接:https://www.haomeiwen.com/subject/kpvlfqtx.html