js-预编译就是那个鬼

来源:互联网 时间:1970-01-01

js-预编译就是那个鬼,有需要的朋友可以参考下。

今天的之前只知道函数表达式这样写,而且要写到函数调用之前,不然会报错。也是像这样做的,所以没遇到什么问题。

var functionName = function(){alert("我是函数表达式");} 

函数声明这样写,既可以写到函数调用的前边也可以是后边,就是因为有一个函数声明的提升。具体何为函数提升,母鸡啦。。。
function functionName(){alert("我是函数声明");}

刚刚看了一道题的解释才明白。(不懂的太多呀。)

js的运行机制如下:

1、首先是“预编译”,对当前执行环境创建一个活动对象,并将用var声明的变量设置为活动对象的属性,不过这个时候声明的变量被赋值为undefined;将以function定义的函数也添加为活动对象的属性,并且它们的值是此函数的定义。

2、其次是“解释执行”,当在某个执行环境中要对遇到的var变量进行解析时,搜索会从作用域链的前端开始,向上逐级查询与给定的变量名匹配的属性。如果在局部环境中找到了与该变量匹配的属性,搜索停止,变量赋值。如果在局部环境中没有找到该变量名,则继续沿作用域链向上搜索。搜索过程将一直追溯到全局环境的变量对象。如果全局环境中也没有找到,则该变量就是没有声明。此时这个变量的值为预编译时的undefined。

到此,很明了的可以解释为什么函数表达式一定要写到函数调用的前边了。如果写到后边,在预编译阶段会直接将函数名称编译为undefined,到函数调用那一步,理所应当的就为undefined了。


版权声明:本文为博主原创文章,未经博主允许不得转载。



相关阅读:
Top