JS预解析与变量提升

预解析

JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程

预解析过程:

  1. 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
  2. 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
  3. 先提升var,在提升function。

JavaScript的执行过程

 // 案例1
 var a = 25;
 function abc() {
   alert(a);
   var a = 10;
 }
 abc();
 ?
 ?
 // 案例2
 console.log(a);
 function a() {
   console.log(‘aaaaa‘);
 }
 var a = 1;
 console.log(a);

变量提升

  • 变量提升

    定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。

  • 函数提升

    JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

 // 1、-----------------------------------
 var num = 10;
 fun();
 function fun() {
   console.log(num);
   var num = 20;
 }
 //2、-----------------------------------
 var a = 18;
 f1();
 function f1() {
   var b = 9;
   console.log(a);
   console.log(b);
   var a = ‘123‘;
 }
 // 3、-----------------------------------
 f1();
 console.log(c);
 console.log(b);
 console.log(a);
 function f1() {
   var a = b = c = 9;
   console.log(a);
   console.log(b);
   console.log(c);
 }

  

原文地址:https://www.cnblogs.com/superjishere/p/11675271.html

时间: 2024-07-31 08:28:15

JS预解析与变量提升的相关文章

javascript的预解析与变量提升

JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了解到,JavaScript有“预解析”行为.理解这一特性是很重要的,不然在实际开发中你可能会遇到很多无从解析的问题,甚至导致程序bug的存在.为了解析这一现象,也作为自己的一次学习总结,本文逐步引导你来认识JavaScript“预解析”,如果我的见解有误,还望指正. (1)如果JavaScript仅是运行时自上往下

1、JS预解析原理(一)

一.作用域概念.预解析规则.表达式 1.作用域概念 什么是作用域:简单说就是作用的范围,指的是函数在哪些范围内可以用,而在其他部分就不可以使用,如果需要使用就需要重新定义. 作用域的作用是什么:用来执行读或者写的操作. 2.预解析规则 script:自上而下进行解析, 函数:由里到外进行解析. 但是浏览器在执行JS代码的时候会分成两部分操作:预解析以及逐行执行代码 预解析:浏览器在开始工作的时候会先解读JS代码的关键字:比如:var function 参数等,并把解析到的内容存入一个类似仓库的地

Js 预解析

今天本来是要看作用域的,不知怎么就稀里糊涂的学习了一边预解析,下面给朋友们介绍一下我对 js 预解析的理解. //示例 1 alert(a) // undefind. alert(fn) // function 整个函数块. var a = 1; function fn(){ return falss; }; 为什么?第一个是 undefind , 第二个是 functin 函数块.这是怎么运行的?这就要 稍微介绍一下 js解析器的运行方法.扩展:什么事js解析器 js解析器在运行js代码的时候

关于js语法中的一些难点(预解析,变量提前,作用域)

******标题很吓人************ 其实就是一个小例子 ,从例子中浅析 这些知识点 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>关于js中的那些小知识点</title> </head> <body> </body> <script> var a=1; function zero

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预解析

1.在逐行读js代码前,解析器会先提取所有声明的var变量和函数 js解析器会先把脚本里所有var变量声明读一遍,但是它只读变量名字,不读变量值,一开始它会赋给所有读到的var变量一个[未定义]的值.而js解析器提取函数是整块提取的读出来,把函数当作整体来看待,也就是说读变量是没值的,读函数是有内容的.这个过程就是js的预解析 所以在逐行读代码的这一步时,解析器每找到一个var声明,就会去看先前提取的东西中有没有它的值(往往是[未定义]) 2.var a=0; var是声明, a=0是表达式 如

第06课:作用域、JS预解析机制

从字面上理解----域就是空间.范围.区域,作用就是读.写,所以作用域我们可以简单理解为:在什么样空间或者范围内对数据进行什么样的读或写操作. 看一下代码 alert(a); // 为什么是undefined var a = 1; alert(a); //为什么浏览器无反应 a = 1; 要了解为什么这些现象必须先知道浏览器是如何读取js代码,而这段浏览器专门用来读取js代码的片段我们称之为-----js解析器  首先,我们来理解“JS解析器”是如何工作的? 先看如下代码 alert(a); /

js预解析问题总结

//示例 1 alert(a) // undefind. alert(fn) // function 整个函数块. var a = 1; function fn(){ return falss; }; 为什么?第一个是 undefind , 第二个是 functin 函数块.这是怎么运行的? js解析器在运行js代码的时候 分为两步: 第一步 把所有的 变量.函数.参数 提前到当前作用域的顶部. 第二步 逐行解读代码 从左到右.从上至下. //示例 1 解释 var a; // a 变量 提前到

js预解析相关知识总结

js的预解析特别有意思,像在做智力题一样有意思~ 预解析 预解析:在解释这行代码之前发生的事情--变量的声明提前了,函数的声明提前 console.log(num) --未定义Num,结果是报错 var num; console.log(num)--结果是undefined console.log(num) var num = 10;--结果是undefined 注意:预解析分段,多对的script标签中如果函数名相同,互不影响 原文地址:https://www.cnblogs.com/code