javascript的预编译阶段

1.变量与函数

在js中声明一个变量有let const var三种方式,函数有声明函数和函数表达式两种。

2.预编译阶段做的事情

在预编译阶段,所有的var声明的变量会被初始化为undefined,所有的声明函数会用它的定义进行初始化,

而const let声明的变量则不会在预编译阶段执行初始化,函数表达式也属于变量的一种,因此如果使用var进行声明,则也会被初始化为undefined。如果在赋值之前调用函数表达式,则会报一个语法错误 Uncaught TypeError: say is not a function,因为此时这个变量的值还是undefined。如果使用const 或 let声明一个函数表达式,则这个函数表达式不会在预编译阶段被初始化,在函数表达式被赋值之前调用它同样会报一个Uncaught TypeError: say is not a function错误。

以下第一段代码使用var声明一个函数表达式,在被赋值前,因为已经在预编译阶段进行了初始化,所以它的值为undefined;

第二段代码使用const进行声明,因为预编译阶段没有对它进行,所以这个变量还不存在

console.log(say);
var say=function(){};
VM176:1 undefined
console.log(say);
const say=function(){};
VM199:1 Uncaught ReferenceError: say1 is not defined

3.预编译的时间

在全局作用域的所有代码在代码进入运行时就进行预编译,在函数作用域内的代码在函数被调用时进行预编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值