js函数声明和函数表达式及预解析

Js函数声明和函数表达式
区别:1.使用上没有任何区别
2.但对预解析有影响
3.函数声明是函数,函数表达式是变量
4.以function开头的都是函数声明,其他都是函数表达式
5.一旦函数声明变成了函数表达式,就会放弃函数名(只能看,没有任何作用),函数表达式一般都是没有函数名的。
6.()是函数执行符号
7.不能直接去执行函数声明
8.可以去执行函数表达式
函数的预解析的四部:
1.在函数执行前的一瞬间,会产生一个AO对象(active object).
2.分析函数,有形参则将形参作为AO对象的属性名,对应的实参则为AO对象的属性值。
3.寻找分析Var声明,变量名作为AO对象的属性名,值为undefined,遇到同同名,不做任何改变
4.分析函数声明,函数命为AO对象的属性名,值为函数体,遇到同名的直接覆盖
1.全局作用域产生的对象为GO对象(global object),在进入script后,在所有代码之前产生。
产生的方式和AO对象基本相同,只是少了分析参数这一环节
2.寻找分析Var声明,变量名作为GO对象的属性名,值为undefined,
遇到同同名,不做任何改变
3.分析函数声明,函数命为GO对象的属性名,值为函数体,遇到同名的直接覆盖
7.            // 内部的原理,浏览器底层代码,我们可根据实际情况进行模拟
8.            // 1.test.AO = {
9.
10.            // }
11.            // 2.test.AO = {
12.            //     a : 1
13.            //     b : undefined
14.            // }
15.            // 3.test.AO = {
16.            //     a : 1
17.            //     b : undefined
18.            // }
19.            // 4.test.AO = {
20.            //     a : function a(){};
21.            //     b : undefined
22.            // }
23.            // 此时,已经预解析过程分析完毕,开始逐行执行代码,沿着test.AO对象开始执行代码
24.            // 活动对象后期肯定会发生改变的。预解析过程分析过的就不用管,没分析执行(var后面的赋值部分)
25.            
26.            console.log(a);  //function a(){};
27.            console.log(b);  //undefined
28.            var b = 234;
29.            // test.AO = {
30.            //     a : function a(){};
31.            //     b : 234
32.            // }
33.            console.log(b);   //234
34.            a = 123;
35.            // test.AO = {
36.            //     a : 123
37.            //     b : 234
38.            // }
39.            console.log(a);  //123
40.            function a(){};
41.            var a;
42.            b = 456;
43.            // test.AO = {
44.            //     a : 123
45.            //     b : 456
46.            // }
47.            var b = function(){}
48.            // test.AO = {
49.            //     a : 123
50.            //     b : function(){}
51.            // }
52.            console.log(a);   //123
53.            console.log(b);   //function(){}
54.        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值