js的预解析和作用域】的更多相关文章

预解析指的就是,在js文件或者script里面的代码在正式开始执行之前,进行的一些解析工作.这个工作很简单,就是在全局中寻找var关键字声明的变量和通过function关键字声明的函数. 1.寻找 var function 参数 等关键字,根据var a提前设置为 a=未定义(undefined) ,所有的变量,在正式运行前都提前赋值了一个未定义. 2.函数在正式运行代码前,都是整个函数块.fn1=function  fn1(){alert(2);} 执行js代码一般分两步:1.预解析代码.  …
js解析器首先不会逐行读代码,这是第二部了. 首先 根据var找到变量,根据function找函数,找到变量var a = 1,js解析器只会读取等号前面的var a,并把a设置值未定义,并不会读取等号后面的a = 1,所以a的值是未定义,并加入仓库,根据function找到函数后,function a (){ alert(2); },找到函数是函数整体,这是js的预解析(预解析只找var 和函数).遇到重名的留下后面的,变量和函数重名了,函数在后面,只留下函数. 正式读取代码的时候,是从上到下…
在ES6之前,变量使用var声明,会存在变量的预解析(函数也有预解析).ES6引了let和const,但是现阶段ES6并没有完全普及,而且很多比较老的代码都还是按照ES5的标准甚至是ES3的标准来书写的,要想得心应手的维护之前的代码个人感觉还是很有必要了解下js的预解析机制. 一.变量和函数在内存中的存在形式 JavaScript中的变量类型和其他语言一样,有基本数据类型和引用数据类型.基本数据类型包括:undefined.null.boolean.String.Number:引用数据类型主要是…
前言:“函数是对象,函数名是指针.”,函数名仅仅是指向函数的指针,与其他包含函数指针的变量没有什么区别,话句话说,一个函数可能有多个名字. -1.函数声明,function+函数名称.调用方法:函数名(参数): function f1(x,y){ return x+y; //函数体 }console.log(f1(2,3)); 这是最常见的指定函数名声明函数,在函数体内返回参数值,函数调用时才会输出结果.既然说到函数,那就免不了提一提它的预解析以及作用域. 此类方法定义的函数,在代码开始执行之前…
js函数预解析 例子1: 先上一段代码,看看能不能写出最终的执行结果. console.log(a); var a = 1; console.log(a); function a(){ console.log(2); } var a = 3; console.log(a); function a(){ console.log(4); } console.log(a); a(); 运行结果: 解释一下: 首先预解析阶段遇到 var a = 1:声明变量a 然后遇到第一个函数a声明,这时由于和变量a…
JS的预解析包括两部分: 1. 变量提升 2. 函数声明 对于变量提升, 可以看下下面这块代码 console.log(name); // undefined var name = "Lilei"; 对于函数声明, 可以看下下面这块代码 sayHello(); // "Hello" function sayHello() { console.log("Hello"); } 由上面的执行结果, 我们可以知道JS的预解析对变量和函数的行为是不一样的,…
JavaScript解析过程分为两个阶段: 一是:编译阶段.就是JavaScrip预解析阶段,在这个阶段JavaScript解析器将完成把JavaScript脚本代码转换到字节码; 二是:执行阶段.在编译阶段JavaScript解析器借助执行环境把字节码生成机械码,并顺序执行; 预解析:在当前的作用域中,js代码执行之前浏览器会默认把所有带var 和function的进行提前的声明或者定义; eg:var num=1; sum(); function sum(){console.log(num)…
最近在看js的一些资料,总结一下昨晚看到的js作用域方面的知识,不准确的地方希望留言指正! 先看片段js代码如下: < script type="text/javascript" > console.log(a); var a = "hello world!"; console.log(b); b = "你好,世界!"; < /script > 开始的输出结果很出乎意料,firebug调试输出结果如下: console.l…
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con…
一.语言特性         1.预解析:js会把变量的声明(仅仅是声明)提到顶部,但是不会突破作用域.                 alert(a);var a= 12; //结果,undefined         2.页面无论多长都会进行预解析.         3.js语言执行步骤:                 读取一个script标签=>预解析=>执行里面代码=>读取下一个script=>预解析=>执行代码         4.函数也有预解析,但是要注意:当…