js预编译环节 变量声明提升 函数声明整体提升

预编译四部曲

1.创建AO对象

2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined

3.将实参和形参统一

4.在函数体里面找函数声明,值赋予函数体

function fn(a){
     console.log(a) //function a(){}
     var a = 123;
     console.log(a)//123
     function a(){}
     console.log(a)//123
     var b = function(){}
     console.log(b) //function(){}

}
fn(1)

原文地址:https://www.cnblogs.com/showcase/p/11263386.html

时间: 2024-10-13 15:41:02

js预编译环节 变量声明提升 函数声明整体提升的相关文章

js 预编译环节的变量提升

有些东西需要先告诉你怎么用,再去理解定义 关于变量的提升 function test () { console.log(a) var a = 100 console.log(a) }; test () // undefined // 100 执行步骤 function test () { var a = undefined console.log(a) a = 100 console.log(a) } 关于函数的提升 function test () { console.log(a) funct

js预编译和函数执行

javascript 执行过程 1.语法检测(有没有基本的语法错误,例如中文,关键字错误...)2.词法分析(预编译) (1)创建全局GO(global object)对象 (2)对var声明的变量进行声明提升但不赋值,放入GO对象中 (3)对函数体整体进行提升,放入GO对象中 3.逐行执行 一.全局 直接是script标签中的代码,不包括函数执行 <script type="text/javascript"> console.log(a); var a = 100; co

typeof、摇树优化、js预编译

typeof:  typeof用以获取一个变量或者表达式的类型,一元运算符 null:空.无.表示不存在,当为对象的属性赋值为null,表示删除该属性 undefined:未定义.当声明变量却没有赋值时会显示该值.可以为变量赋值为undefined number:数值.最原始的数据类型,表达式计算的载体 string:字符串.最抽象的数据类型,信息传播的载体 boolean:布尔值.最机械的数据类型,逻辑运算的载体 object:对象.面向对象的基础 注意:没有数组,因为type数组时结果是ob

js预编译

先来做三个测试 eg1: 1 var a; 2 a = 1; 3 4 function a() {}; 5 console.log(a); eg2: 1 var a; 2 function a() {}; 3 console.log(a); eg3: 1 var a; 2 function a() {}; 3 a = 1; 4 console.log(a); eg1:输出1   eg2:输出a方法   eg3:输出1 为什么输出结果是这样的? 先来看看js预编译实现过程: 1.js首先扫描var

关于js预编译以及js文件执行顺序的几个问题。

关于js的执行原理,除去html页面中直接添加的代码,js代码的放置可以分为两类. //情形a           <script type="text/javascript" src="xxx.js"$amp;>amp;$lt;/script>           //情形b            <script type="text/javascript">           code......       

Handlebars.js 预编译(转)

Handlebars.js 官网上对预编译1是这样说的: 你需要安装 Node.js 你需要在全局环境中,通过 Npm 安装 handlebars 包 然后你就可以通过命令预编译你的 handlebars 模板文件: $ handlebars <input> --output <output> 假设我有一个模板文件,名称为 person.handlebars,内容很简单,如下: <table> <tr> <td>This is {{firstna

javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)

平时再用js写函数的时候,一般都是以惯例 function fn () {} 的方式来声明一个函数,在阅读一些优秀插件的时候又不免见到 var fn = function () {} 这种函数的创建,究竟他们用起来有什么区别呢,今天就本着打破砂锅问到底的精神,好好来说说这个让人神魂颠倒的--函数声明.  函数声明 函数声明示例代码 function fn () { console.log('fn 函数执行..'); // code.. } 这样我们就声明了一个名称为fn的函数,这里出个思考,你认

JavaScript 预编译(变量提升和函数提升的原理)

本文部分内容转自https://www.cnblogs.com/CBDoctor/p/3745246.html 1.变量提升 1 console.log(global); // undefined 2 var global = 'global'; 3 console.log(global); // global 4 5 function fn () { 6 console.log(a); // undefined 7 var a = 'aaa'; 8 console.log(a); // aaa

浅谈JS变量声明和函数声明提升

先来两个问题 很多时候,在直觉上,我们都会认为JS代码在执行时都是自上而下一行一行执行的,但是实际上,有一种情况会导致这个假设是错误的. a = 2; var a; console.log(a); 按照传统眼光,console.log(a)输出的应该是undefined,因为var a在a = 2之后.但是,输出的是2. 再看第二段代码: console.log(a); var a = 2; 有人会想到第一段代码,然后回答undefined.还有人会认为a在使用前未被声明,因此抛出Referen