JavaScript 预解析,你真的懂吗?

it2022-05-05  132

预解析:在当前作用域下, js 运行之前,会把带有 var 和 function 关键字的事先声明,并在内存中安排好。然后再从上到下执行 js 语句。预解析只会发生在通过 var 定义的变量和 function 上。

声明和定义

var num=24;

这行简单的代码其实是两个步骤:声明和定义。

声明:var num;告诉浏览器在全局作用域中有一个 num 变量了,如果一个变量只是声明了,但是没有赋值,默认值是 undefined。定义:num = 12; 定义就是给变量进行赋值。

var 声明的变量和 function 声明的函数在预解析的区别

var 声明的变量和 function 声明的函数在预解析的时候有区别,var 声明的变量在预解析的时候只是提前的声明,function 声明的函数在预解析的时候会提前声明并且会同时定义。也就是说 var 声明的变量和 function 声明的函数的区别是在声明的同时有没同时进行定义。

预解析只发生在当前的作用域下

程序最开始的时候,只对 window 下的变量和函数进行预解析,只有函数执行的时候才会对函数中的变量很函数进行预解析。

console.log(num); // 返回undefined var num = 24; console.log(num); // 返回24 func(100 , 200); function func(num1 , num2) { var total = num1 + num2; console.log(total); // 返回300 }

第一次输出 num 的时候,由于预解析的原因,只声明了还没有定义,所以会输出 undefined;第二次输出 num 的时候,已经定义了,所以输出 24。

由于函数的声明和定义是同时进行的,所以func()虽然是在 func 函数定义声明处之前调用的,但是依然可以正常的调用,会正常输出 300。

不染-何程龙 认证博客专家 Python Java SQL 何程龙,大学计算机信息管理专业在读,现就任后端开发工程师、数据库工程师。曾担任城建创新创业学院理事会会长,现为博客专家、签约讲师,中国开源协会-开发分会管理委员会委员。带过多批学员,因授课耐心细致,通俗易懂,风趣幽默,富有激情,受学员一致好评。现主要从事软件开发及软件教育培训,具有丰富的实战经验,善于将复杂问题简单化,擅长Web前端、JavaScript框架、Java并发、C#编程、Python Web、数据库SQL等领域及技术。

最新回复(0)