首页 > 代码库 > js预编译
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关键字,提前到顶端;
2.然后扫描function定义,提到var之后
3.然后再顺序执行
那么上面的三个例子预编译形式分别如下:
eg1:
1 var a;2 3 function a() {};4 a = 1;5 console.log(a);
eg2:
1 var a;2 3 function a() {};4 console.log(a);
eg3:
1 var a;2 3 function a() {};4 a = 1;5 console.log(a);
了解预编译过程后可以再来看看下面几个例子,试着先做一下
1.
f();function f(){ console.log("a");}==========================================f();var f = function(){ console.log("a");}
第一个程序 运行输出:1 ;第二个程序运行报错,f is not a function()
2.
function f(){ console.log("a");}f();function f(){ console.log("b");}f();==========================================function f(){ console.log("a");}f();var f = function(){ console.log("b");}f();=============================================var f = function(){ console.log("a");}f();function(){ console.log("b");}f();
第一个输出:b b ; 第二个输出:a b ; 第三个输出:a a
js引擎读取一段js代码,首先预编译,寻找全局变量和全局函数,遇到全局变量,把变量的值变为undifined存放在内存中,并不进行赋值操作,遇到全局函数,也是存放在内存中,如果这个过程中发现语法错误,预编译终止。
js预编译
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。