JavaScript预解析、作用域

本文详细介绍了JavaScript代码的执行过程,包括预解析和执行阶段。重点讲解了函数声明与赋值函数的区别,以及变量预解析的概念。同时,阐述了全局作用域和局部作用域的定义,强调了作用域内的变量查找规则以及局部变量未声明直接赋值会自动成为全局变量的现象。此外,还讨论了作用域对函数内变量的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、定义

JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程

function 声明的函数会预解析到顶部,而赋值式的创建函数是先解析这个变量到顶部,然后程序在执行时到该赋值函数时才会知道这个是赋值式函数,

a();//由于变量的预解析,不知道a是一个变量还是一个函数,所以输出a is not function
var a = function(){
    console.log(1);
};
a();//执行成功,输出1


而变量预解析是先解析变量,待代码执行到赋值时才会进行赋值

console.log(a);//变量的预解析,所以打印undefined
var a = 10;
console.log(a);//由于上面已经赋值,所以打印10


作用域


全局作用域和局部作用域

全局作用域:范围整个页面,只有当前页面关闭时,全局作用域才会失效

局部作用域:全局作用域中又划分出的小范围的作用域,函数内部可以创建局部作用域,到目前为止,也只有函数内部可以创建局部变量

当定义了一个全局a变量,而函数的局部作用域中也声明了a变量 如果在函数作用域中输出一下a 这个a输出的会是作用域中a的值,就近原则。

当局部作用域中没有使用var定义 但是却有赋值,当你在外部调用这个函数,在全局中来进行使用这个变量时,他会把这个变量自动转换成全局变量
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值